컨텍스트에 추가하기
Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 3번째.
홈 페이지도 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세 단계는 언제나 같습니다. 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 플레이그라운드