Какую роль выполняет метод get_context_data в Class-Based Views Django?

«Какую роль выполняет метод get_context_data в Class-Based Views Django?» — вопрос из категории Django, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод `get_context_data` в классовых представлениях (Class-Based Views, CBV) Django отвечает за создание и наполнение словаря с контекстом, который передается в шаблон для рендеринга. Его основная задача — позволить разработчику **добавить в контекст дополнительные, кастомные данные**, которые не предоставляются базовым классом представления по умолчанию. ### Процесс работы 1. Django вызывает метод `get_context_data` во время обработки запроса. 2. Внутри метода **обязательно** нужно сначала вызвать родительскую реализацию через `super().get_context_data(**kwargs)`, чтобы получить базовый контекст (например, `object_list` в `ListView`). 3. Затем в полученный словарь `context` добавляются новые ключи и значения. 4. Модифицированный словарь возвращается из метода. ### Практический пример с `ListView` ```python # 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` доступны добавленные переменные: ```html

{{ page_title }} (Всего: {{ total_articles }})

    {% for article in articles %}
  • {{ article.title }}
  • {% endfor %}
``` Таким образом, `get_context_data` является ключевым механизмом для кастомизации данных, передаваемых в шаблоны при использовании CBV.