2013-02-11 11 views
11

Come posso ottenere l'utente corrente in un tag modello django? (l'oggetto richiesta non è accessibile) O come posso accedere all'oggetto richiesta?Come ottenere l'utente corrente in un tag di modello?

+0

È possibile creare come processore contesto di creazione di tag template e chiamarlo sempre in un modello. Nel processore di contesto è possibile ottenere l'utente senza chiamare sempre la funzione in un modello. – catherine

+0

Davvero complicato per un tag modello di una fodera .. È davvero django così ingiustamente? – tapioco123

+2

Oppure prova a inserire questo modello {{user.username}} – catherine

risposta

11

Se si desidera accedere l'utente corrente in un tag template, è necessario passare come parametro nei modelli, in questo modo:

{% my_template_tag user %} 

Quindi assicurarsi che il tag modello accetta questa parametro extra. Guarda il documentation su questo argomento. Dovresti anche dare un'occhiata a simple tags.

9

utente è sempre allegato alla richiesta, nei tuoi modelli è possibile effettuare le seguenti operazioni:

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

Non è necessario specificare "richiesta" per accedere ai suoi contenuti

UPDATE:

essere consapevoli: is_authenticated() tornare sempre True per l'utente loggato (User gli oggetti), ma restituisce False per AnonymousUser (utenti ospiti). Leggi qui: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/

+4

Questo è fuori tema – tapioco123

+0

'user.is_authenticated' restituisce sempre true quindi è sostanzialmente inutile. –

+0

no! Restituisce sempre true per l'utente (quelli registrati), ma restituisce false per AnonymousUser, quindi non è inutile! Leggi qui attentamente: https://docs.djangoproject.com/en/1.7/ref/contrib/auth/ – daveoncode

0

la questione è stata già answered here:

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

e assicurarsi di avere il processore richiesta di contesto modello installato nel vostro settings.py:

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

Nota:

  • Usa request.user.get_username() in viste & user.get_username in modelli. Preferito su attributo nome utente di riferimento direttamente. Source
  • Questa variabile di contesto del modello è disponibile se viene utilizzato un RequestContext.
  • django.contrib.auth.context_processors.auth è abilitata di default & contiene l'utente variabile
  • NON è necessario attivare django.core.context_processors.request processore contesto modello.

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

Problemi correlati