Метод get_context_data
Метод get_context_data применяется к классу TemplateView
и возвращает словарь с данными, которые передаются в шаблон.
Этот метод позволяет добавлять произвольные переменные в контекст
шаблона, которые можно использовать для отображения динамической
информации. Метод вызывается автоматически при обработке запроса
и может быть переопределен для передачи специфических данных.
Синтаксис
class 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
Пример
Давайте создадим представление, которое передает в шаблон приветственное сообщение и текущую дату:
from 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
Результат выполнения кода в шаблоне:
{
'greeting': 'Добро пожаловать на сайт!',
'current_date': datetime.date(2026, 9, 7)
}
Пример
Давайте добавим в контекст список последних статей, полученных из базы данных:
from 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
Результат выполнения кода:
{
'articles': [
<Article: latest_article_1>,
<Article: latest_article_2>,
<Article: latest_article_3>
]
}
Пример
Давайте передадим в шаблон данные из URL-параметров с использованием аргументов метода:
from 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
Результат выполнения кода:
{
'category': <Category: Technology>,
'articles': [
<Article: Tech_article_1>,
<Article: Tech_article_2>
]
}
Смотрите также
-
класс
TemplateView,
который используется для рендеринга шаблонов -
атрибут
template_name,
который определяет имя шаблона для рендеринга -
класс
ListView,
который автоматически добавляет список объектов в контекст -
класс
DetailView,
который используется для отображения одного объекта