2013-02-11 25 views
11

Jak mogę uzyskać bieżącego użytkownika w znacznikach szablonu django? (obiekt żądania nie jest dostępny) Albo jak mogę uzyskać dostęp do obiektu żądania?Jak uzyskać bieżącego użytkownika w tagu szablonu?

+0

Można utworzyć go jako procesor kontekście niż tworzenie tagów szablonów i nazywają to zawsze w szablonie. W procesorze kontekstowym można uzyskać użytkownika bez wywoływania funkcji w szablonie zawsze. – catherine

+0

Naprawdę skomplikowane dla tagu szablonu jednej liniowej ... Czy naprawdę django jest tak niefortunne? – tapioco123

+2

Lub spróbuj umieścić to w swoim szablonie {{user.username}} – catherine

Odpowiedz

11

Jeśli chcesz uzyskać dostęp do bieżącego użytkownika w szablon, należy przekazać go jako parametr w szablonach, jak tak:

{% my_template_tag user %} 

Następnie upewnij się, że szablon akceptuje to dodatkowy parametr. Sprawdź documentation na ten temat. Powinieneś również sprawdzić numer simple tags.

9

Użytkownik jest zawsze dołączony do wniosku, w szablonach można wykonać następujące czynności:

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

Nie trzeba określić „żądanie”, aby uzyskać dostęp do jego zawartości

UPDATE:

Bądź świadomy: is_authenticated() zawsze powrócić True dla zalogowanych użytkowników (User obiektów), ale zwraca False dla AnonymousUser (użytkownicy-goście). Czytaj tutaj: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/

+4

To nie jest temat – tapioco123

+0

'user.is_authenticated' zawsze zwraca wartość true, więc jest w zasadzie bezużyteczne. –

+0

nie! Zawsze zwraca wartość true dla User (zalogowany), ale zwraca wartość false dla AnonymousUser, więc nie jest bezużyteczna! Przeczytaj uważnie: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/ – daveoncode

0

Ta kwestia była już answered here:

{% ifuser.is_authenticated %} 
    Welcome 
'{{ user.username }}' 
    {% else %} 
    <a href="{% url django.contrib.auth.login %}">Login</a> 
{% endif %} 

i upewnij się, że masz procesor żądanie kontekstowe szablon zainstalowanej w settings.py:

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

Uwaga:

  • użytku request.user.get_username() w widokach & user.get_username w szablonów. Preferowane bezpośrednie odwoływanie się do atrybutu nazwy użytkownika. Source
  • Ta zmienna kontekstowa szablonu jest dostępna, jeśli używany jest RequestContext.
  • django.contrib.auth.context_processors.auth jest domyślnie włączona & zawiera zmienna użytkownikowi
  • NIE musisz włączyć django.core.context_processors.request procesor kontekstowego szablonu.

Źródło: https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

Powiązane problemy