如何访问Django模板中的用户个人资料?


88

我正在使用来存储一些其他的每用户信息AUTH_PROFILE_MODULE

我们可以使用Django模板访问用户,{{ request.user }}但是由于只能通过函数访问配置文件,因此如何访问配置文件中的字段user.get_profile()

确实需要每次将配置文件显式传递到模板中吗?

Answers:



27

不知道为什么对我来说不一样,但是我需要使用{{user}}而不是{{request.user}}。


5
文档说(docs.djangoproject.com/en/dev/topics/auth/…),您可以通过{{user}}轻松访问用户。
熊加米奥夫

2
使用{{user}}而不使用{{request.user}}的真正原因是因为您没有包括用于请求的模板上下文处理器。https://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request
knightZeRo 2014年

4
对于Django 1.10,链接略有不同,但是思路是相同的,即django.template.context_processors.request插入requestin模板,而django.contrib.auth.context_processors.auth插入userin上下文。docs.djangoproject.com/en/1.10/ref/templates/api/...
安德烈- Niculae Petre的

8

是的,可以使用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/…。需要注意的是,这将在开发版本中发生变化,但是,请参阅我链接到的那一部分的上面的段落。
ralokt 2011年

@tkolar,这里到底有什么误导?如果用户没有个人资料,而您正在调用get_profile.something,则会导致错误。
Sergey Golovchenko

4

如果您使用的是Django> 1.5,则无法再使用get_profile

如果您有旧版应用,则应将其AUTH_PROFILE_MODULE = 'myapp.profile'从中删除settings.py

如果您models.OneToOneField(User)在Profile类中使用,则只需使用

{{ request.user.profile.whatever }}

在您的Django模板中


1
@AlexStewart您是说我们不再需要request前面的键盘了?
卢克·阿隆

3

如果它可以帮助任何人,我将在模板中使用以下内容:

用户名: {{ user.username }}

用户全名: {{ user.get_full_name }}

用户组: {{ user.groups.all.0 }}

电子邮件: {{ user.email }}

会议开始于: {{ user.last_login }}

示例结果如下:

用户:审计员ezio

用户组:auditGroup

用户名:testUser03

电子邮件:testuser03@auditor.com

会议开始于-2018年4月16日,9:38 pm

谢谢 :)


1

工作!

在您的个人资料模型中提供related_name

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

然后在模板中使用。这里company_name是配置文件表中的字段

{{ request.user.user_profile.company_name }}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.