2010-07-31 9 views
4

J'ai dans mon modèle base.html:Django: informations utilisateur dans le modèle

{% if user.is_authenticated %} 
<p style="color:#000;"> 
    Welcome 
    {{ user.first_name }} 
    | 
    <a href="/logout/">Logout</a> 
</p> 
{% endif %} 

Après authentifie, et allez à cette page, mon prénom ne montre pas. Quelqu'un peut-il me dire pourquoi?

« Bienvenue » aussi ne se présente pas. Donc, cela doit échouer sur user.is_authenticated.

Merci. :)

+0

Est-ce que le 'Welcome' montrent du tout, ou ne répond pas à la condition? –

+0

Assurez-vous de ne pas écraser la variable 'user' dans le contexte transmis à votre modèle. De plus, vérifiez si vous êtes vraiment connecté et que votre utilisateur a un prénom .-) – jweyrich

+0

Bienvenue ne s'affiche pas non plus. –

Répondre

6

Le middleware django.contrib.auth.context_processors.auth est responsable de la configuration request.user avant qu'une demande n'atteigne le contrôleur.

Pour y accéder à partir d'un modèle, vous devez passer cette variable ou un RequestContext. Exemple:

def something(request): 
    context_instance = RequestContext(request) 
    template_name = 'your_template.html' 
    extra_context = { 'other_variable': 'some value' } 
    return render_to_response(template_name, extra_context, context_instance) 

De cette manière, toutes les variables de requête sont accessibles à partir du modèle.

+0

Très bien. J'ai utilisé ce code exactement. :) –

+0

J'ai le même problème, mais mes modèles sont des modèles de base, par votre méthode je dois le passer sur la vue de chaque page childe? –

+0

@MuhammadTaqiHassanBukhari: Vous pouvez écrire une fonction qui cache ces détails, donc au lieu d'appeler 'render_to_response', vous appelez votre propre fonction qui a tout cette logique. – jweyrich

Questions connexes