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?
risposta
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.
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/
Questo è fuori tema – tapioco123
'user.is_authenticated' restituisce sempre true quindi è sostanzialmente inutile. –
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
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
È 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
Davvero complicato per un tag modello di una fodera .. È davvero django così ingiustamente? – tapioco123
Oppure prova a inserire questo modello {{user.username}} – catherine