Как шаблон получает пользовательский объект?Как шаблон в django получает объект пользователя?
Иными словами, какой процесс именно во время рендеринга передает объект пользователя шаблону?
А что еще доступно в шаблоне?
Как шаблон получает пользовательский объект?Как шаблон в django получает объект пользователя?
Иными словами, какой процесс именно во время рендеринга передает объект пользователя шаблону?
А что еще доступно в шаблоне?
Используя контекстный процессор django.contrib.auth.context_processors.auth
, вы можете получить доступ к экземпляру auth.User
в своем шаблоне.
Если
TEMPLATE_CONTEXT_PROCESSORS
содержит этот процессор, каждыйRequestContext
будет содержать следующие переменные:
user
- Anauth.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',
)
Кроме того, следует добавить [ '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