作者:夏晶阳--艺术 | 2023-09-01 11:50
我正在使用存储一些额外的每用户信息AUTH_PROFILE_MODULE
.
我们可以使用Django模板访问用户,{{ request.user }}
但是我们如何访问配置文件中的字段,因为配置文件只能通过函数访问user.get_profile()
?
是否真的需要每次都将配置文件明确传递到模板中?
1> AdamKG..:
使用{{ request.user.get_profile.whatever }}
.Django的模板语言自动调用可调用的东西 - 在本例中是.get_profile()
方法.
请参阅http://docs.djangoproject.com/en/dev/topics/templates/#variables规则非常酷.
这在Django 1.5及更高版本中已弃用,在Django 1.7及更高版本中不起作用.请参阅Sacha Rau关于如何在现代Django中执行此操作的答案.
2> Rachel..:
不确定为什么它对我来说不同,但我需要使用{{user}}而不是{{request.user}}.
文档说(http://docs.djangoproject.com/en/dev/topics/auth/#authentication-data-in-templates),您可以简单地通过{{user}}访问用户,如您所说.
Django 1.10的链接略有不同,但想法是一样的,`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
使用{{user}}而不是{{request.user}}的真正原因是因为您没有为请求包含模板上下文处理器.[https://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request](https://docs.djangoproject.com/en/dev/ref/templates/API /#django的核上下文处理器请求)
3> Sergey Golov..:
是的,可以使用request.user.get_profile从模板访问配置文件
但是有一个小警告:并非所有用户都会拥有配置文件,这在我的情况下是管理员用户.因此,直接{{ request.user.get_profile.whatever }}
从模板调用
会在这种情况下导致错误.
如果您确定所有用户始终都有配置文件,则可以安全地从模板调用,否则请get_profile()
从视图中的try-except块中调用并将其传递给模板.