Всегда отправляйте информацию о пользователе в каждом шаблоне Django - PullRequest
2 голосов
/ 10 марта 2012

Я использовал готовые примеры шаблонов для регистрации в Django и заметил, что для этих страниц Django понимает user, и я делаю такие вещи, как user.is_authenticated и user.username.

Я пытался просмотреть код views.py как в регистрации Django, так и в django.contrib.auth.views, но я не мог понять, как эти двое всегда отправляли информацию user в шаблоны.

Я всегда мог явно отправлять информацию о контексте user каждому представлению, но это нарушало бы принцип СУХОГО.

Я пытался использовать это решение , но я получаю сообщение об ошибке

Put 'django.contrib.auth.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.

И даже если я поместил вышеупомянутый путь внутрь settings.py, как это

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'doors.processor_file_name.user',
)

мои шаблоны до сих пор не знают о user.

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Оказывается, каждый раз, когда я использовал render_to_response в моем views.py ...

def order_all( request ) :
    orders = Order.objects.all()
    return render_to_response( 'doors/order/list.html', { 'orders' : orders } )

, словарь не является RequestContext.Использование RequestContext автоматически включает TEMPLATE_CONTEXT_PROCESSORS, который в моем случае будет включать django.contrib.auth.context_processors.auth, который будет передавать информацию user в каждый шаблон.

Другими словами, я простонужно изменить приведенный выше код на этот

def order_all( request ) :
    orders = Order.objects.all()
    return render_to_response( 'doors/order/list.html', context_instance = RequestContext( request, { 'orders' : orders } ) )

Не забудьте импортировать RequestContext тоже

from django.template import RequestContext

Оказывается, мне не нужно включать в простоту django.contrib.auth.context_processors.auth (или напишите мой пользовательский doors.processor_file_name.user) в TEMPLATE_CONTEXT_PROCESSORS, потому что django.contrib.auth.context_processors.auth включено по умолчанию

0 голосов
/ 06 февраля 2014

Я понимаю, что это старый вопрос, но для всех, кто сталкивается с этой проблемой, вы можете использовать "render" вместо "render_to_response":

def order_all(request):
    orders = Order.objects.all()
    return render(request, 'doors/order/list.html', { 'orders': order })

Это также исключает необходимость импорта RequestContext. Согласно django docs , "render" - это то же самое, что и "render_to_response", но имеет аргумент экземпляра контекста, который вызывает использование RequestContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...