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

チャレンジ

簡単

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

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

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

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