Вы должны использовать django-полномочий или любой пакет полномочий . Хотя я не могу гарантировать, что они не полагаются на хаки сами по себе, но, по крайней мере, вы не будете одни, используя хаки. Тем не менее, вот рабочее решение вашей проблемы:
Патч обезьяны django.template.base.RequestContext , для установки request.context = self.
Создайте процессор контекста шаблона , который может использовать request.context
Добавьте процессор контекста в настройки , и все готово
Вот пример, который вы можете просто вставить в settings.py, он работает:
def print_context(request):
print request.context.get('form', 'No form in this context')
return {}
from django.template.base import RequestContext
orig_init = RequestContext.__init__
def new_init(self, request, **kwargs):
request.context = self
orig_init(self, request, **kwargs)
RequestContext.__init__ = new_init
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.request',
'settings.print_context',
)
Обратите внимание, что вы работаете против дизайна Django , я опубликовал этот ответ, предполагая, что вы знаете, что делаете - вы хорошо знаете и Python, и Django.