Я храню дополнительную информацию для каждого пользователя, используя расширение AUTH_PROFILE_MODULE
.
Мы можем получить доступ к пользователю в шаблоне Django, используя, {{ request.user }}
но как мы можем получить доступ к полям в профиле, поскольку профиль доступен только через функцию user.get_profile()
?
Действительно ли обязательно каждый раз явно передавать профиль в шаблон?
python
django
django-templates
Swaroop CH
источник
источник
Не знаю, почему для меня это другое, но мне нужно использовать {{user}}, а не {{request.user}}.
источник
django.template.context_processors.request
вставляетrequest
в шаблоне, в то время какdjango.contrib.auth.context_processors.auth
вставкиuser
в контексте. docs.djangoproject.com/en/1.10/ref/templates/api/…Да, можно получить доступ к профилю из шаблона с помощью request.user.get_profile
Однако есть небольшая оговорка : не у всех пользователей будут профили, как в моем случае с администраторами. Поэтому вызов напрямую
{{ request.user.get_profile.whatever }}
из шаблона в таких случаях вызовет ошибку.Если вы уверены, что у всех ваших пользователей всегда есть профили, вызовите из шаблона безопасно, в противном случае вызовите
get_profile()
из блока try-except в вашем представлении и передайте его в шаблон.источник
{{ request.user.get_profile.whatever }}
, но{{ request.user.get_profile }}
будет работать и может быть использован для проверки, существует ли профиль в текущих версиях. См. Docs.djangoproject.com/en/dev/ref/templates/api/… . Однако есть примечание, которое изменится в версии для разработки, см. Абзац над тем, на который я ссылался.Если вы используете Django> 1.5, вы больше не можете использовать
get_profile
.Если у вас есть устаревшее приложение, удалите
AUTH_PROFILE_MODULE = 'myapp.profile'
из негоsettings.py
.Если вы используете
models.OneToOneField(User)
в своем классе Profile, вы можете просто использоватьв вашем шаблоне Django
источник
request
клавиатура спереди?Если это кому-то поможет, я использовал в своем шаблоне следующее:
Имя пользователя:
{{ user.username }}
Полное имя пользователя:
{{ user.get_full_name }}
Группа пользователей:
{{ user.groups.all.0 }}
Электронное письмо:
{{ user.email }}
Сессия началась:
{{ user.last_login }}
Примерный результат такой:
Благодарность :)
источник
За работой !
В модели вашего профиля укажите related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
Потом в шаблоне используйте. Здесь имя_компании - поле в таблице профиля
источник