我正在使用AUTH_PROFILE_MODULE
来存储一些用户额外的信息。
我们可以在Django模板中使用{{ request.user }}
访问用户,但由于配置文件只能通过函数user.get_profile()
访问,所以我们如何访问配置文件中的字段呢?
每次都需要显式地将配置文件传递到模板中吗?这是必需的吗?
我正在使用AUTH_PROFILE_MODULE
来存储一些用户额外的信息。
我们可以在Django模板中使用{{ request.user }}
访问用户,但由于配置文件只能通过函数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
插入到上下文中。参考链接:https://docs.djangoproject.com/en/1.10/ref/templates/api/#django-template-context-processors-request - Andrei-Niculae Petre是的,可以使用 request.user.get_profile
从模板访问个人资料。
然而有一个小的警告:并非所有用户都拥有个人资料,这在管理员用户中是我的情况。因此,在模板中直接调用{{ request.user.get_profile.whatever }}
在这种情况下会导致错误。
如果您确定所有用户都有个人资料,则可以安全地从模板调用,否则请在视图中使用try-except块调用get_profile()
并将其传递到模板中。
{{ request.user.get_profile.whatever }}
,但是 {{ request.user.get_profile }}
可以工作,并且可以用来检查当前版本中是否存在配置文件。请参见 http://docs.djangoproject.com/en/dev/ref/templates/api/#how-invalid-variables-are-handled 。不过需要注意的是,在开发版本中会有所改变,请参见我链接上面的段落。 - ralokt{{ user.username }}
用户全名:{{ user.get_full_name }}
用户组:{{ user.groups.all.0 }}
电子邮件:{{ user.email }}
会话开始于:{{ user.last_login }}
一个示例结果如下:
感谢您的阅读。用户:审计员Ezio
用户组:审计组
用户名: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模板中
工作中!
在您的个人资料模型中提供related_name。
user = models.OneToOneField(AUTH_USER_MODEL, related_name="user_profile", on_delete=models.CASCADE)
然后在模板中使用。这里的company_name是profile表中的字段。
{{ request.user.user_profile.company_name }}