Как получить доступ к профилю пользователя в шаблоне Django?

StackOverflow https://stackoverflow.com/questions/422140

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

{{ request.user.profile.whatever }}

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

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

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

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

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

Электронная почта: {{user.email}}

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

Пример результата выглядит следующим образом:

  

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

     

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

     

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

     

Электронная почта: testuser03@auditor.com

     

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

Спасибо:)

Работаю!

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

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

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

{{ request.user.user_profile.company_name }}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top