2013-02-11 14 views
11

Wie kann ich den aktuellen Benutzer in einem Django Template Tags bekommen? (Anfrage Objekt ist nicht zugänglich) Oder wie kann ich auf Anfrage Objekt zugreifen?Wie bekomme ich den aktuellen Benutzer in einem Template-Tag?

+0

Sie können es als Kontext-Prozessor erstellen als Template-Tags erstellen und sie immer in einer Vorlage nennen. Im Kontext-Prozessor können Sie den Benutzer holen, ohne die Funktion immer in einer Vorlage aufzurufen. – catherine

+0

Wirklich kompliziert für einen One-Liner Template-Tag .. Ist wirklich Django so unhandlich? – tapioco123

+2

Oder versuchen Sie, dies in Ihre Vorlage {{user.username}} – catherine

Antwort

11

Wenn Sie den aktuellen Benutzer in einem Template-Tag zugreifen möchten, können Sie es als Parameter in den Vorlagen passieren muss, etwa so:

{% my_template_tag user %} 

Dann stellen Sie sicher, Ihre Template-Tag dies akzeptiert zusätzlicher Parameter Überprüfen Sie die documentation zu diesem Thema. Sie sollten auch simple tags auschecken.

9

Der Benutzer immer auf die Anforderung angebracht ist, kann in Ihren Vorlagen, die Sie wie folgt vor:

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

Sie müssen nicht angeben „Anforderung“ sein Inhalt

UPDATE zuzugreifen:

beachten Sie: is_authenticated() immer True Rückkehr für angemeldete Benutzer (User Objekte), aber kehrt False für AnonymousUser (Gastbenutzer). Lesen Sie hier: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/

+4

Das ist off Thema – tapioco123

+0

'user.is_authenticated' gibt immer wahr zurück, so dass es im Grunde nutzlos ist. –

+0

nein! Es gibt immer true für Benutzer zurück (geloggte), gibt aber für AnonymousUser false zurück, ist also nicht nutzlos! Lesen Sie hier sorgfältig: https://docs.djangoproject.com/de/1.7/ref/contrib/auth/ – daveoncode

0

Diese Frage war bereits answered here:

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

und stellen Sie sicher, dass Sie die Anfrage Vorlage Kontext Prozessor in Ihrem settings.py installiert haben:

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

Hinweis:

  • Verwenden request.user.get_username() in Ansichten & user.get_username in Vorlagen. Bevorzugtes direktes Verweisen auf das username-Attribut. Source
  • Diese Vorlagenkontextvariable ist verfügbar, wenn ein RequestContext verwendet wird.
  • django.contrib.auth.context_processors.auth durch standardmässig aktiviert ist & enthält die Variable Benutzer
  • Sie benötigen zum Prozessor Vorlage Kontext nicht aktivieren django.core.context_processors.request.

Quelle: https://docs.djangoproject.com/en/dev/topics/auth/default/#authentication-data-in-templates

Verwandte Themen