Метод get_context_data

Метод get_context_data применяется к классу TemplateView и возвращает словарь с данными, которые передаются в шаблон. Этот метод позволяет добавлять произвольные переменные в контекст шаблона, которые можно использовать для отображения динамической информации. Метод вызывается автоматически при обработке запроса и может быть переопределен для передачи специфических данных.

Синтаксис

pythonclass MyView(TemplateView):
  template_name = 'my_template.html'
  
  def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    # Добавление своих данных в контекст
    context['my_variable'] = 'my_value'
    return context

Пример

Давайте создадим представление, которое передает в шаблон приветственное сообщение и текущую дату:

pythonfrom django.views.generic import TemplateView
from datetime import datetime

class GreetingView(TemplateView):
  template_name = 'greeting.html'
  
  def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['greeting'] = 'Добро пожаловать на сайт!'
    context['current_date'] = datetime.now().date()
    return context

Результат выполнения кода в шаблоне:

python{
  'greeting': 'Добро пожаловать на сайт!',
  'current_date': datetime.date(2026, 9, 7)
}

Пример

Давайте добавим в контекст список последних статей, полученных из базы данных:

pythonfrom django.views.generic import TemplateView
from myapp.models import Article

class ArticleListView(TemplateView):
  template_name = 'articles.html'
  
  def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    recent_articles = Article.objects.order_by('-created_at')[:5]
    context['articles'] = recent_articles
    return context

Результат выполнения кода:

python{
  'articles': [
    <Article: latest_article_1>,
    <Article: latest_article_2>,
    <Article: latest_article_3>
  ]
}

Пример

Давайте передадим в шаблон данные из URL-параметров с использованием аргументов метода:

pythonfrom django.views.generic import TemplateView
from myapp.models import Category

class CategoryDetailView(TemplateView):
  template_name = 'category_detail.html'
  
  def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    category_id = kwargs.get('category_id')
    category = Category.objects.get(id=category_id)
    context['category'] = category
    context['articles'] = category.article_set.all()
    return context

Результат выполнения кода:

python{
  'category': <Category: Technology>,
  'articles': [
    <Article: Tech_article_1>,
    <Article: Tech_article_2>
  ]
}

Смотрите также

  • класс TemplateView,
    который используется для рендеринга шаблонов
  • атрибут template_name,
    который определяет имя шаблона для рендеринга
  • класс ListView,
    который автоматически добавляет список объектов в контекст
  • класс DetailView,
    который используется для отображения одного объекта