Как получить доступ к профилю пользователя в шаблоне Django?
-
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 }}