Добавление в контекст
Часть раздела Представления на основе классов путешествия по Django на Coddy. Урок 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Три шага, всегда одни и те же: super().get_context_data(**kwargs) получает словарь, созданный Django, ты добавляешь свои ключи, а затем return возвращает словарь. Шаблон получает всё, что возвращает этот метод.
Запрос находится внутри метода, поэтому выполняется при каждом запросе. Если бы он был атрибутом класса, то выполнялся бы один раз при запуске сервера, и число никогда бы не менялось.
Задание
ЛегкоТеперь шаблон главной страницы также показывает самую новую вакансию. В jobs/views.py перепишите HomeView как TemplateView для jobs/home.html, без get(). В его контекст добавьте count — количество вакансий — и latest — вакансию с самой поздней датой posted.
Нажмите «Играть»: на главной странице отображаются 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"
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Представления на основе классов
2Универсальные представления для отображения
ListViewDetailViewПотренируйтесь самостоятельно: Песочница Django