Как получить доступ к профилю пользователя в шаблоне Django? - PullRequest
84 голосов
/ 08 января 2009

Я храню дополнительную информацию для каждого пользователя, используя AUTH_PROFILE_MODULE.

Мы можем получить доступ к пользователю в шаблоне Django, используя {{ request.user }}, но как нам получить доступ к полям в профиле, поскольку профиль доступен только через функцию user.get_profile()?

Действительно ли требуется явно передавать профиль в шаблон каждый раз?

Ответы [ 6 ]

131 голосов
/ 08 января 2009

Используйте {{ request.user.get_profile.whatever }}. Язык шаблонов Django автоматически называет вызываемые объекты - в данном случае, метод .get_profile().

25 голосов
/ 22 января 2010

Не знаю, почему у меня все по-другому, но мне нужно использовать {{user}}, а не {{request.user}}.

8 голосов
/ 08 января 2009

Да, можно получить доступ к профилю из шаблона, используя request.user.get_profile

Однако есть небольшое предостережение : не все пользователи будут иметь профили, как в моем случае с пользователями-администраторами. Так звонит прямо {{ request.user.get_profile.whatever }} из шаблона приведет к ошибке в таких случаях.

Если вы уверены, что у всех ваших пользователей всегда есть профили, безопасно звонить из шаблона, в противном случае вызовите get_profile() из блока try-Кроме того, что вы видите, и передайте его шаблону.

4 голосов
/ 27 марта 2016

Если вы используете Django> 1,5, вы больше не можете использовать get_profile.

Если у вас есть устаревшее приложение, вы должны удалить AUTH_PROFILE_MODULE = 'myapp.profile' из вашего settings.py.

Если вы используете models.OneToOneField(User) в своем классе профиля, вы можете просто использовать

{{ request.user.profile.whatever }}

в вашем шаблоне Django

2 голосов
/ 16 апреля 2018

Если это кому-нибудь поможет, я использовал в своем шаблоне следующее:

Имя пользователя: {{ user.username }}

Полное имя пользователя: {{ user.get_full_name }}

Группа пользователей: {{ user.groups.all.0 }}

E-mail: {{ user.email }}

Сессия началась в: {{ user.last_login }}

Пример выборки таков:

Пользователь: auditor ezio

Группа пользователей: auditGroup

Имя пользователя: testUser03

E-mail: testuser03@auditor.com

Сессия началась 16 апреля 2018 года, в 9:38 вечера.

Спасибо:)

0 голосов
/ 28 августа 2018

работает!

В вашей модели профиля укажите related_name

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

Тогда в шаблоне используйте. Здесь company_name - это поле в таблице профиля

{{ request.user.user_profile.company_name }}
...