Przechowuję dodatkowe informacje o każdym użytkowniku przy użyciu rozszerzenia AUTH_PROFILE_MODULE
.
Możemy uzyskać dostęp do użytkownika w szablonie Django za pomocą, {{ request.user }}
ale jak możemy uzyskać dostęp do pól w profilu, skoro profil jest dostępny tylko za pośrednictwem funkcji user.get_profile()
?
Czy naprawdę konieczne jest jawne przekazywanie profilu do szablonu za każdym razem?
python
django
django-templates
Swaroop CH
źródło
źródło
Nie wiem, dlaczego jest inaczej, ale muszę użyć {{user}} zamiast {{request.user}}.
źródło
django.template.context_processors.request
wstawiarequest
szablon in, adjango.contrib.auth.context_processors.auth
wstawiauser
kontekst. docs.djangoproject.com/en/1.10/ref/templates/api/…Tak, możliwy jest dostęp do profilu z szablonu za pomocą request.user.get_profile
Jest jednak małe zastrzeżenie : nie wszyscy użytkownicy będą mieli profile, co w moim przypadku miało miejsce w przypadku administratorów. Więc wywołanie bezpośrednio
{{ request.user.get_profile.whatever }}
z szablonu spowoduje w takich przypadkach błąd.Jeśli jesteś pewien, że wszyscy Twoi użytkownicy zawsze mają profile, możesz bezpiecznie wywołać z szablonu, w przeciwnym razie zadzwoń
get_profile()
z bloku try-except w swoim widoku i przekaż go do szablonu.źródło
{{ request.user.get_profile.whatever }}
, ale{{ request.user.get_profile }}
zadziała i może posłużyć do sprawdzenia, czy profil istnieje, czy nie w aktualnych wersjach. Zobacz docs.djangoproject.com/en/dev/ref/templates/api/… . Jest uwaga, że zmieni się to w wersji rozwojowej, zobacz akapit nad tym, do którego się podłączyłem.Jeśli używasz Django> 1.5, nie możesz już używać
get_profile
.Jeśli masz starszą aplikację, usuń ją
AUTH_PROFILE_MODULE = 'myapp.profile'
zsettings.py
.Jeśli używasz
models.OneToOneField(User)
w swojej klasie profilu, możesz po prostu użyćw szablonie Django
źródło
request
klawiatury z przodu?Jeśli komuś to pomoże, użyłem w moim szablonie:
Nazwa Użytkownika:
{{ user.username }}
Imię i nazwisko użytkownika:
{{ user.get_full_name }}
Grupa użytkowników:
{{ user.groups.all.0 }}
E-mail:
{{ user.email }}
Sesja rozpoczęła się o:
{{ user.last_login }}
Przykładowy wynik wygląda tak:
Dzięki :)
źródło
Działa!
W swoim modelu profilu podaj related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Następnie użyj szablonu. Tutaj nazwa_firmy to pole w tabeli profilu
źródło