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