Посмотрите на базовую реализацию SingleObjectMixin
(«оригинал» get_context_data
).
Он просто возвращает **kwargs
в качестве контекста (словарь) при добавлении редактируемого объекта с указанным ключом.
def get_context_data(self, **kwargs):
context = kwargs
context_object_name = self.get_context_object_name(self.object)
if context_object_name:
context[context_object_name] = self.object
return context
В DetailView
, kwargs "волшебно вырвал "из того, что называет это / прохождение в этих кваргах.В вашем случае это будет BaseDetailView.get()
.
class BaseDetailView(SingleObjectMixin, View):
def get(self, request, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
Позже он используется многими классами представлений (как в render_to_response(self.get_context_data)
), который передает необработанный словарь context
в self.response_class
, который по умолчаниюdjango.template.TemplateResponse
.
TemplateResponse
знает, как визуализировать себя, и в своей функции resolve_context
, наконец, преобразует словарь в django.template.Context
Вы действительно можете следить за источником всехпуть от оригинального метода до самого конца.