コンテキストへの追加
CoddyのDjangoジャーニー「クラスベースビュー」セクションの一部。レッスン 3/18。
ホームページも TemplateView にできますが、そのテンプレートにはデータが必要です。テンプレートが受け取る変数はコンテキストで、汎用ビューは get_context_data() メソッドでコンテキストを構築します。これをオーバーライドして独自のデータを追加しましょう。レシピサイトでは、手早く作れるレシピの数を数えます。
class RecipeHomeView(TemplateView):
template_name = "recipes/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["quick"] = Recipe.objects.filter(minutes__lte=30).count()
return context手順は3つで、いつも同じです。super().get_context_data(**kwargs) で Django が作成した辞書を取得し、独自のキーを追加して、辞書を return します。テンプレートには、このメソッドが返す値が渡されます。
クエリはメソッド内にあるため、リクエストごとに実行されます。クラス属性にすると、サーバーの起動時に一度だけ実行され、数は変わらなくなります。
チャレンジ
簡単ホームテンプレートには、最新の求人も表示されるようになりました。HomeViewを書き換えます。
jobs/home.html用のTemplateViewとし、get()は使いません。- 求人の件数である
countと、postedの日付が最も新しい求人であるlatestをコンテキストに追加します。
Runを押します。ホームページに12 jobs openとNewest: Python Developer at Brightlineと表示されます。
自分で試してみよう
from django.shortcuts import render
from django.views import View
from django.views.generic import TemplateView
from .models import Job
class HomeView(View):
def get(self, request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
class AboutView(TemplateView):
template_name = "jobs/about.html"
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
クラスベースビューのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド