2013-02-11 8 views
11

Как я могу получить текущего пользователя в тегах шаблона django? (объект запроса недоступен) Или как я могу получить доступ к объекту запроса?Как получить текущего пользователя в теге шаблона?

+0

Вы можете создать его как процессор контекста, чем создавать теги шаблона и назовите его всегда в шаблоне. В процессоре контекста вы можете получить пользователя, не вызывая функцию в шаблоне. – catherine

+0

Действительно сложный для одного тега шаблона лайнера. Действительно ли django так нечестно? – tapioco123

+2

Или попробуйте поместить это в ваш шаблон {{user.username}} – catherine

ответ

11

Если вы хотите получить доступ к текущему пользователю в шаблоне тега, вы должны передать его в качестве параметра в шаблонах, например, так:

{% my_template_tag user %} 

Затем убедитесь, что ваш шаблон тег принимает это дополнительный параметр. Посмотрите documentation на эту тему. Вы также можете проверить simple tags.

9

Пользователь всегда присоединяется к просьбе, в шаблонах вы можете сделать следующее:

{% if user.is_authenticated %} 
{% endif %} 

Вы не должны указать «запрос», чтобы получить доступ к его содержание

UPDATE:

Будьте в курсе: is_authenticated() всегда возвращают True для зарегистрированного пользователя (User объектов), но возвращает False для AnonymousUser (гостевые). Читайте здесь: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/

+4

Это не в тему – tapioco123

+0

'user.is_authenticated' всегда возвращает true, так что это в основном бесполезно. –

+0

нет! Он всегда возвращает true для пользователя (зарегистрированный), но возвращает false для AnonymousUser, поэтому не бесполезен! Внимательно прочитайте здесь: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/ – daveoncode

0

Этот вопрос уже был 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