Как я могу получить текущего пользователя в тегах шаблона django? (объект запроса недоступен) Или как я могу получить доступ к объекту запроса?Как получить текущего пользователя в теге шаблона?
ответ
Если вы хотите получить доступ к текущему пользователю в шаблоне тега, вы должны передать его в качестве параметра в шаблонах, например, так:
{% my_template_tag user %}
Затем убедитесь, что ваш шаблон тег принимает это дополнительный параметр. Посмотрите documentation на эту тему. Вы также можете проверить simple tags.
Пользователь всегда присоединяется к просьбе, в шаблонах вы можете сделать следующее:
{% if user.is_authenticated %}
{% endif %}
Вы не должны указать «запрос», чтобы получить доступ к его содержание
UPDATE:
Будьте в курсе: is_authenticated()
всегда возвращают True
для зарегистрированного пользователя (User
объектов), но возвращает False
для AnonymousUser
(гостевые). Читайте здесь: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/
Это не в тему – tapioco123
'user.is_authenticated' всегда возвращает true, так что это в основном бесполезно. –
нет! Он всегда возвращает true для пользователя (зарегистрированный), но возвращает false для AnonymousUser, поэтому не бесполезен! Внимательно прочитайте здесь: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/ – daveoncode
Этот вопрос уже был answered here:
{% ifuser.is_authenticated %}
Welcome
'{{ user.username }}'
{% else %}
<a href="{% url django.contrib.auth.login %}">Login</a>
{% endif %}
и убедитесь, что у вас есть запрос контекста шаблон процессор, установленный в вашем settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
...
)
Примечание:
- использования
request.user.get_username()
во мнениях &user.get_username
в шаблоны. Предпочтительно напрямую ссылаться на атрибут имени пользователя. Source - Эта переменная контекста шаблона доступна, если используется RequestContext.
- django.contrib.auth.context_processors.auth включен по умолчанию & содержит пользовательские переменную
- Вам НЕ нужно активировать django.core.context_processors.request контекста шаблона процессор.
Источник: https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates
Вы можете создать его как процессор контекста, чем создавать теги шаблона и назовите его всегда в шаблоне. В процессоре контекста вы можете получить пользователя, не вызывая функцию в шаблоне. – catherine
Действительно сложный для одного тега шаблона лайнера. Действительно ли django так нечестно? – tapioco123
Или попробуйте поместить это в ваш шаблон {{user.username}} – catherine