Ответ
Метод get_context_data
в классовых представлениях (Class-Based Views, CBV) Django отвечает за создание и наполнение словаря с контекстом, который передается в шаблон для рендеринга.
Его основная задача — позволить разработчику добавить в контекст дополнительные, кастомные данные, которые не предоставляются базовым классом представления по умолчанию.
Процесс работы
- Django вызывает метод
get_context_data
во время обработки запроса. - Внутри метода обязательно нужно сначала вызвать родительскую реализацию через
super().get_context_data(**kwargs)
, чтобы получить базовый контекст (например,object_list
вListView
). - Затем в полученный словарь
context
добавляются новые ключи и значения. - Модифицированный словарь возвращается из метода.
Практический пример с ListView
# views.py
from django.views.generic import ListView
from .models import Article
class ArticleListView(ListView):
model = Article
template_name = 'articles/article_list.html'
context_object_name = 'articles' # Имя переменной в шаблоне
def get_context_data(self, **kwargs):
# 1. Получаем базовый контекст от родительского класса
context = super().get_context_data(**kwargs)
# 2. Добавляем свои данные
context['total_articles'] = Article.objects.count()
context['page_title'] = 'Список всех статей'
# 3. Возвращаем обновленный контекст
return context
Использование в шаблоне
Теперь в шаблоне articles/article_list.html
доступны добавленные переменные:
<!-- articles/article_list.html -->
<h1>{{ page_title }} (Всего: {{ total_articles }})</h1>
<ul>
{% for article in articles %}
<li>{{ article.title }}</li>
{% endfor %}
</ul>
Таким образом, get_context_data
является ключевым механизмом для кастомизации данных, передаваемых в шаблоны при использовании CBV.