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?

War es hilfreich?

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 }}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top