it-swarm.com.de

Wie kann ich auf das Benutzerprofil in einer Django-Vorlage zugreifen?

Ich speichere zusätzliche Informationen pro Benutzer mit dem AUTH_PROFILE_MODULE .

Wir können auf den Benutzer in einer Django-Vorlage mit {{ request.user }} zugreifen, aber wie greifen wir auf Felder im Profil zu, da das Profil nur über die Funktion user.get_profile() zugänglich ist?

Ist es wirklich erforderlich, das Profil jedes Mal explizit in die Vorlage zu übergeben?

83
Swaroop C H

Verwenden Sie {{ request.user.get_profile.whatever }}. Djangos Schabloniersprache ruft automatisch aufrufbare Dinge auf - in diesem Fall die .get_profile()-Methode.

130
AdamKG

Ich weiß nicht, warum es für mich anders ist, aber ich muss {{user}} anstelle von {{request.user}} verwenden.

23
Rachel

Ja, es ist möglich, über .__ auf das Profil zuzugreifen. request.user.get_profile

Es gibt jedoch eine kleine vorbehalt: Nicht alle Benutzer haben Profile, was in meinem Fall bei Admin-Benutzern der Fall war. Also direkt anrufen {{ request.user.get_profile.whatever }} aus der Vorlage führt in solchen Fällen zu einem Fehler.

Wenn Sie sicher sind, dass alle Benutzer immer über Profile verfügen, können Sie sie sicher über die Vorlage aufrufen. Andernfalls rufen Sie get_profile() aus dem try-except-Block in Ihrer Ansicht auf und übergeben Sie ihn an die Vorlage.

8

Wenn Sie Django> 1.5 verwenden, können Sie get_profile nicht mehr verwenden.

Wenn Sie eine ältere App haben, sollten Sie AUTH_PROFILE_MODULE = 'myapp.profile' von Ihrem settings.py entfernen.

Wenn Sie models.OneToOneField(User) in Ihrer Profilklasse verwenden, können Sie einfach verwenden 

{{ request.user.profile.whatever }}

in deiner Django-Vorlage

4
Sascha Rau

Wenn es jemandem hilft, habe ich die folgenden in meiner Vorlage verwendet:

Benutzername: {{ user.username }}

Vollständiger Name des Benutzers: {{ user.get_full_name }}

Benutzergruppe: {{ user.groups.all.0 }}

Email: {{ user.email }}

Sitzung gestartet um: {{ user.last_login }}

Ein Beispielergebnis sieht so aus:

Benutzer: Auditor Ezio 

Benutzergruppe: auditGroup 

Benutzername: testUser03 

E-Mail: [email protected] 

Die Sitzung begann am 16. April 2018, 21:38 Uhr.

Vielen Dank :)

2
Mohammad

Arbeiten !

Geben Sie in Ihrem Profilmodell related_name an

user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)

Dann in vorlage verwenden. Hier ist company_name ein Feld in der Profiltabelle

{{ request.user.user_profile.company_name }}
0
Nids Barthwal