我正在使用 AUTH_PROFILE_MODULE
存储一些额外的每用户信息。
我们可以使用 {{ request.user }}
在 Django 模板中访问用户,但是我们如何访问配置文件中的字段,因为配置文件只能通过函数 user.get_profile()
访问?
是否真的需要每次都将配置文件显式传递到模板中?
使用 {{ request.user.get_profile.whatever }}
。 Django 的模板语言会自动调用可调用的东西——在本例中是 .get_profile()
方法。
不知道为什么它对我不同,但我需要使用 {{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 }}
会导致错误。
如果您确定所有用户始终拥有配置文件,则可以安全地从模板调用,否则从视图中的 try-except 块中调用 get_profile()
并将其传递给模板。
{{ request.user.get_profile.whatever }}
,但 {{ request.user.get_profile }}
可以工作并且可用于检查当前版本中是否存在配置文件。请参阅docs.djangoproject.com/en/dev/ref/templates/api/…。不过,有一个注意事项,这将在开发版本中发生变化,请参阅我链接到的上面的段落。
如果它对任何人有帮助,我在模板中使用了以下内容:
用户名:{{ user.username }}
用户全名:{{ user.get_full_name }}
用户组:{{ user.groups.all.0 }}
电子邮件:{{ user.email }}
会话开始于:{{ user.last_login }}
示例结果如下:
用户:auditor ezio 用户组:auditGroup 用户名:testUser03 电子邮件:testuser03@auditor.com 会话开始于 - 2018 年 4 月 16 日,晚上 9:38
谢谢 :)
如果您使用的是 Django > 1.5 你不能再使用get_profile
。
如果您有旧版应用程序,则应从 settings.py
中删除 AUTH_PROFILE_MODULE = 'myapp.profile'
。
如果您在 Profile 类中使用 models.OneToOneField(User)
,您可以简单地使用
{{ request.user.profile.whatever }}
在你的 Django 模板中
request
键盘?
在职的 !
在您的个人资料模型中提供related_name
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
然后在模板中使用。这里 company_name 是配置文件表中的字段
{{ request.user.user_profile.company_name }}