Menu
CoddyTech

Добавление в контекст

Часть раздела Представления на основе классов путешествия по 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 возвращает словарь. Шаблон получает всё, что возвращает этот метод.

Запрос выполняется внутри метода, поэтому он запускается при каждом обращении. Если бы он был атрибутом класса, то выполнился бы один раз при запуске сервера, и число никогда бы не менялось.

challenge icon

Задание

Легко

Теперь в шаблоне главной страницы также показывается самая свежая вакансия. Перепишите 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"
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Представления на основе классов

Потренируйтесь самостоятельно: Песочница Django