Menu
CoddyTech

コンテキストへの追加

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します。テンプレートには、このメソッドが返す値が渡されます。

クエリはメソッド内にあるため、リクエストのたびに実行されます。クラス属性にすると、サーバーの起動時に一度だけ実行され、数は変わらなくなります。

challenge icon

チャレンジ

簡単

ホームテンプレートに最新の求人も表示されるようになりました。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"
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

クラスベースビューのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド