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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

Однако есть небольшой caveat: не все пользователи будут иметь профили, которые были в моем случае с пользователями admin. Поэтому вызов напрямую   {{ request.user.get_profile.whatever }} из шаблона вызовет ошибку в таких случаях.

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

Ответ 4

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

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

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

{{ request.user.profile.whatever }}

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