Ответ
Метод `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 %}