Wie das Benutzerprofil in einer Django-Vorlage zugreifen?
-
05-07-2019 - |
Frage
Ich bin einige zusätzliche pro-Benutzerinformationen zu speichern, die AUTH_PROFILE_MODULE
.
Wir können die Benutzer in einer Django-Vorlage zugreifen {{ request.user }}
verwenden, aber wie kommen wir an Felder im Profil, da das Profil nur über eine Funktion user.get_profile()
ist?
Ist es wirklich erforderlich ist, um explizit jedes Mal das Profil in die Vorlage übergeben?
Lösung
Mit {{ request.user.get_profile.whatever }}
. Djangos Template-Sprache automatisch ruft Dinge, die aufgerufen werden können -. In diesem Fall die .get_profile()
Methode
Andere Tipps
Nicht sicher, warum es anders für mich, aber ich brauche verwenden {{user}} anstatt {{request.user}}.
Ja, es ist möglich Profil von Vorlage für den Zugriff mit request.user.get_profile
Allerdings gibt es einen kleinen Vorbehalt : nicht all Benutzer-Profile haben, die in meinem Fall mit Admin-Benutzer war. So ruft direkt
{{ request.user.get_profile.whatever }}
aus der Vorlage einen Fehler in solchen Fällen führen.
Wenn Sie sind sicher, dass alle Benutzer immer Profile haben es sicher ist, aus einer Vorlage zu rufen, rufen sonst get_profile()
aus try-except-Block aus Ihrer Sicht und geben es an die Vorlage ein.
Wenn Sie mit Django> 1.5 nicht mehr get_profile
verwenden können.
Wenn Sie einen Legacy-App haben, sollten Sie AUTH_PROFILE_MODULE = 'myapp.profile'
von Ihrem settings.py
entfernen.
Wenn Sie models.OneToOneField(User)
in Ihrem Profil-Klasse verwenden, können Sie einfach
{{ request.user.profile.whatever }}
in Ihrer Django Vorlage
Wenn es hilft jemand, habe ich das Folgende in meiner Vorlage:
Benutzername: {{ user.username }}
User Vollständiger Name: {{ user.get_full_name }}
Benutzergruppe: {{ user.groups.all.0 }}
E-Mail: {{ user.email }}
Session Beginn: {{ user.last_login }}
Eine Probe Ergebnis ist wie folgt:
Benutzer: Auditor ezio
Benutzergruppe: auditGroup
Benutzername: testUser03
E-Mail: testuser03@auditor.com
Sitzung gestartet at- 16. April 2018, 09.38 Uhr Ortszeit.
Danke:)
Arbeits!
In Ihrem Profil Modell liefern related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Dann in Vorlage verwenden. Hier company_name ist Feld in Profiltabelle
{{ request.user.user_profile.company_name }}