2010-12-02 5 views
0

Je joue avec la bibliothèque django auth, et je rencontre quelque chose que je ne comprends pas.Django auth confusion dans les modèles

j'ai un modèle maître base.html et à l'intérieur de ce modèle j'ai le code suivant:

{% if user.is_authenticated %} 
    Welcome {{user.username}}, <a href='/accounts/logout/'>Logout</a> 
{% else %} 
    Welcome Guest, Please <a href='/accounts/login/'>Login</a> 
{% endif %} 

Cette opération est répétée sur chaque page, dans l'en-tête. Cependant, après avoir ouvert une session, sur toutes les pages sauf la page de connexion elle-même, elle affiche la chaîne welcome guest..., comme s'il n'y avait pas d'utilisateur authentifié.

Embrouillant cependant, la bibliothèque auth semble être faire son travail ailleurs, je ne peux pas accès de connexion fonctions protégées, et je peux après ive connecté, etc.

Quelqu'un peut-il me dire où im ne va pas?

Répondre

3

De the docs:

Techniquement, ces variables ne sont disponibles dans le contexte de modèle si vous utilisez RequestContext et réglage TEMPLATE_CONTEXT_PROCESSORS contient des "django.contrib.auth.context_processors.auth" , qui est par défaut. Pour plus d'informations, voir le RequestContext docs.

1

Veuillez fournir le code du views.py qui accède à ce modèle. Mais si ma supposition est bonne, vous pourriez ne pas passer l'instance user au modèle. En cas d'absence d'une variable particulière, les modèles Django la considèrent comme Faux.

Vous devez le faire comme ça -

... 
var = RequestContext(request,'somevar':somevar}) 
return render_to_response('somehtml.html', var) 
1

La valeur de "utilisateur" n'est pas dans votre contexte. Les vues génériques, comme la connexion standard, ont déjà une instance RequestContext transmise.

Vous devez create your own, puis transmettre cette instance du dictionnaire lors du rendu du modèle. Les vues génériques le font automatiquement.

Questions connexes