2015-08-08 3 views

ответ

5

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

Если TEMPLATE_CONTEXT_PROCESSORS содержит этот процессор, каждый RequestContext будет содержать следующие переменные:

user - An auth.User экземпляр, представляющий текущего авторизованного пользователя (или экземпляр AnonymousUser, если клиент ISN 't вошел в систему).

Просто определить django.contrib.auth.context_processors.auth в ваших TEMPLATE_CONTEXT_PROCESSORS настроек, а затем использовать {{user}} в шаблоне.

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth", # define this in your settings 
.... 
) 

Шаблон контекста Процессоры:

Его кортеж вызываемых объектов которые используются для заполнения контекста в RequestContext. Эти вызывающие объекты принимают объект запроса как свой аргумент и возвращают словарь элементов, которые должны быть объединены в контекст .

По умолчанию в Django 1.6 установлены следующие процессоры контекста.

("django.contrib.auth.context_processors.auth", 
"django.core.context_processors.debug", 
"django.core.context_processors.i18n", 
"django.core.context_processors.media", 
"django.core.context_processors.static", 
"django.core.context_processors.tz", 
"django.contrib.messages.context_processors.messages") 

Какие переменные присутствуют в шаблоне?

Вы можете узнать, какие все переменные присутствуют во всем шаблоне с помощью настроек TEMPLATE_CONTEXT_PROCESSORS. Каждый обработчик контекста, определенный в нем, включает в себя некоторые переменные в контексте. Например, django.contrib.auth.context_processors.auth включает в себя переменную user, содержащую объект user, контекстный процессор django.core.context_processors.media включает в себя переменную MEDIA_URL в шаблоне.

Чтобы проверить, что все переменные доступны в шаблоне с использованием различных контекстных процессоров, см этого Django documentation link.

Доступ к request объекту в контексте

Вы можете добавить django.core.context_processors.request к TEMPLATE_CONTEXT_PROCESSORS в settings.py и получить доступ к request объект в вашем контексте.

Вы также можете получить доступ к текущему пользователю как {{ request.user }}. Вам придется явно добавить этот параметр, поскольку он отсутствует по умолчанию.

Добавить .request обработчик контекста в TEMPLATE_CONTEXT_PROCESSORS в ваших настройках.

TEMPLATE_CONTEXT_PROCESSORS = (
    .... 
    `django.core.context_processors.request`, 
    ) 

EDIT: (Спасибо @Ozgur)

Кроме того, добавьте AUTHENTICATION_MIDDLEWARE в ваших MIDDLEWARE_CLASSES настройках для user атрибут должен быть установлен в request объекта. Он был удален из MIDDLEWARE_CLASSES настроек по умолчанию в Django 1.7.

класса AuthenticationMiddleware
Добавляет атрибут user, представляющий настоящий момент вошедшего в систему пользователя, чтобы каждый входящий HttpRequest объект.

MIDDLEWARE_CLASSES = (
    ... 
    # explicitly add the 'AuthenticationMiddleware' class 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
) 
+1

Кроме того, следует добавить [ 'AuthenticationMiddleware'] (https://docs.djangoproject.com/en/1.8/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware) в вашем 'MIDDLEWWARE_CLASSES', чтобы связать текущего пользователя с запросами. Django предоставляет отличную [документацию] (https://docs.djangoproject.com/en/1.8/topics/auth/default/#auth-web-requests) об этом. – ozgur

Смежные вопросы