get_context_data() — метод CBV для передачи дополнительных данных в шаблон.
Базовое использование
from django.views.generic import ListView
from .models import Task, Project
class TaskListView(ListView):
model = Task
template_name = 'tasks/task_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['projects'] = Project.objects.all()
context['total_count'] = Task.objects.count()
context['page_title'] = 'Все задачи'
return context
В шаблоне
<h1>{{ page_title }}</h1>
<p>Всего задач: {{ total_count }}</p>
<select name="project">
{% for project in projects %}
<option value="{{ project.pk }}">{{ project.name }}</option>
{% endfor %}
</select>
DetailView + дополнительные данные
class TaskDetailView(DetailView):
model = Task
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['related_tasks'] = Task.objects.filter(
project=self.object.project
).exclude(pk=self.object.pk)[:5]
context['can_edit'] = self.object.owner == self.request.user
return context
Данные из запроса
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['search_query'] = self.request.GET.get('q', '')
context['active_filter'] = self.request.GET.get('status', 'all')
return context
Важно: всегда вызывать super()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) # базовый контекст (object_list и т.д.)
context['extra'] = 'value'
return context
Без super() потеряешь object_list, object, view и другие стандартные переменные.
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!