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

Задание

Легко

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

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

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

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