Frage

Ich habe einige Codes, die aktuellen angemeldeten Benutzer bekommt.

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

Ich möchte den Benutzernamen auf jeder Seite angezeigt.

Im Moment habe ich den Code in jeder Ansicht bin setzen und Leiten des Benutzerobjekts zu jeder Vorlage

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

Dies scheint gegen Djangos D.R.Y Ethik zu gehen. Wie kann ich das selbst mit wiederholen?

EDIT: Vielleicht war Benutzer ein schlechtes Beispiel

.

Was passiert, wenn ich eine Liste von Objekten aus der Datenbank,

haben wollte
items = Item.objects.all()

und in der Liste auf every.

Muss ich diesen Code schreiben und die Liste der Vorlage in jeder Ansicht übergeben. Oder kann ich schreibe einige Code einmal, wird die Liste auf alle Vorlagen zur Verfügung stellen?

War es hilfreich?

Lösung

Sie sollten eine eigenen Template-Tag rel="nofollow für sowas in der Art. Sie können die Daten, die Sie in dem benutzerdefinierten Tag benötigen holen, und es auf die Vorlage senden. Alles, was Sie sich merken müssen, ist den Tag-up in der Template-Datei Sie gehen, es zu benutzen zu laden in.

Andere Tipps

Der Benutzer-ID existiert bereits in der Sitzung. Als solche müssen Sie nicht zu halten, um vorbei.

{{ request.session._auth_user_id }}

Das sollte funktionieren, aber Sie müssen diese in Ihrer Einstellungsdatei in Ihrem TEMPLATE_CONTEXT_PROCESSORS hinzuzufügen:

django.core.context_processors.request

In Ihrem render_to_response, dann würden Sie brauchen die Anforderung als Parameter hinzuzufügen. Zum Beispiel:

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

Was ist request.user?

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

Wie auch immer, wenn es in django nicht bereits vorhanden ist, würde ich Sie vorschlagen, wie django.contrib.sessions.middleware.SessionMiddleware oder django.contrib.auth.middleware.AuthenticationMiddleware eine Middleware-Klasse zu schreiben. Diese Klasse ändert die Anfrage Details, bevor sie zu einer Ansicht gesendet werden.

Wenn Sie es auf einer per-View-Basis benötigt, könnten Sie einen Dekorateur schreiben, das klein bisschen zu tun, und @decorator die Ansichten, die Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top