コンテキストへの追加
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します。テンプレートには、このメソッドが返す値が渡されます。
クエリはメソッド内にあるため、リクエストのたびに実行されます。クラス属性にすると、サーバーの起動時に一度だけ実行され、数は変わらなくなります。
チャレンジ
簡単ホームテンプレートに最新の求人も表示されるようになりました。jobs/views.pyで、HomeViewをjobs/home.html用のTemplateViewとして書き直し、get()は使わないでください。コンテキストには、求人件数を表すcountと、postedの日付が最も新しい求人を表すlatestを追加します。
「実行」を押すと、ホームページに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プレイグラウンド