Ответ 1
Используйте {{ request.user.get_profile.whatever }}
. Язык шаблонов Django автоматически вызывает вызываемые объекты - в этом случае метод .get_profile()
.
Я сохраняю дополнительную информацию для каждого пользователя, используя AUTH_PROFILE_MODULE
.
Мы можем получить доступ к пользователю в шаблоне Django с помощью {{ request.user }}
, но как мы можем получить доступ к полям в профиле, поскольку профиль доступен только через функцию user.get_profile()
?
Требуется ли явно передавать профиль в шаблон каждый раз?
Используйте {{ request.user.get_profile.whatever }}
. Язык шаблонов Django автоматически вызывает вызываемые объекты - в этом случае метод .get_profile()
.
Не знаю, почему это отличается для меня, но мне нужно использовать {{user}}, а не {{request.user}}.
Да, можно получить доступ к профилю из шаблона, используя request.user.get_profile
Однако есть небольшой caveat: не все пользователи будут иметь профили, которые были в моем случае с пользователями admin. Поэтому вызов напрямую {{ request.user.get_profile.whatever }}
из шаблона вызовет ошибку в таких случаях.
Если вы уверены, что у всех ваших пользователей всегда есть профили, можно безопасно звонить из шаблона, иначе вызовите get_profile()
из блока try-except в своем представлении и передайте его в шаблон.
Если вы используете Django > 1.5, вы больше не можете использовать get_profile
.
Если у вас есть устаревшее приложение, вы должны удалить AUTH_PROFILE_MODULE = 'myapp.profile'
из своего settings.py
.
Если вы используете models.OneToOneField(User)
в своем классе Profile, вы можете просто использовать
{{ request.user.profile.whatever }}
в вашем шаблоне Django