Question

J'ai un code qui a l'actuel utilisateur connecté.

userID = request.session.get("_auth_user_id")
    if userID:
        loggedin_user = User.objects.get(pk=int(userID))
    else:
        loggedin_user = None

Je veux que le nom d'utilisateur pour afficher sur chaque page.

En ce moment je suis en train de le code dans chaque point de vue et faire passer l'objet utilisateur à chaque modèle

return render_to_response('index.html', {loggedin_user})

Cela semble aller à l'encontre de l'éthique D.R.Y de django. Comment puis-je faire avec me répéter?

EDIT: Peut-être que l'utilisateur était un mauvais exemple

.

Et si je voulais obtenir une liste des objets de la base de données,

items = Item.objects.all()

et les énumérer sur everypage.

Dois-je écrire ce code et passer la liste au modèle dans chaque point de vue. Ou puis-je écrire un code qui fera une fois cette liste disponible à tous les modèles?

Était-ce utile?

La solution

Vous devez utiliser un personnalisée quelque chose comme ca. Vous pouvez chercher les données dont vous avez besoin dans la balise personnalisée, et l'envoyer au modèle. Tout ce que vous devez retenir est de charger la balise dans le fichier de modèle que vous allez l'utiliser dans.

Autres conseils

L'ID utilisateur existe déjà dans la session. En tant que tel, vous n'avez pas besoin de garder le passer autour.

{{ request.session._auth_user_id }}

Cela devrait fonctionner, mais vous devez ajouter dans vos TEMPLATE_CONTEXT_PROCESSORS dans votre fichier de paramètres:

django.core.context_processors.request

Dans votre render_to_response, vous aurez besoin d'ajouter la demande en tant que paramètre. Par exemple:

 return render_to_response('test.html',{}, context_instance=RequestContext(request))

Qu'en est-il request.user?

if request.user.is_authenticated():
    name = request.user.username
else:
    name = "Anonymous"

Quoi qu'il en soit, si elle n'a pas été déjà disponible dans django, je vous suggère d'écrire une classe Middleware comme django.contrib.sessions.middleware.SessionMiddleware ou django.contrib.auth.middleware.AuthenticationMiddleware. Cette classe modifie les détails de la demande avant d'être envoyés à une vue.

Si vous avez besoin sur une base per-view, vous pouvez écrire un décorateur pour faire ce petit peu, et @decorator les vues que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top