我正在使用来存储一些其他的每用户信息AUTH_PROFILE_MODULE
。
我们可以使用Django模板访问用户,{{ request.user }}
但是由于只能通过函数访问配置文件,因此如何访问配置文件中的字段user.get_profile()
?
确实需要每次将配置文件显式传递到模板中吗?
我正在使用来存储一些其他的每用户信息AUTH_PROFILE_MODULE
。
我们可以使用Django模板访问用户,{{ request.user }}
但是由于只能通过函数访问配置文件,因此如何访问配置文件中的字段user.get_profile()
?
确实需要每次将配置文件显式传递到模板中吗?
Answers:
使用{{ request.user.get_profile.whatever }}
。Django的模板语言会自动调用可调用的东西-在这种情况下为.get_profile()
方法。
不知道为什么对我来说不一样,但是我需要使用{{user}}而不是{{request.user}}。
django.template.context_processors.request
插入request
in模板,而django.contrib.auth.context_processors.auth
插入user
in上下文。docs.djangoproject.com/en/1.10/ref/templates/api/...
是的,可以使用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/…。需要注意的是,这将在开发版本中发生变化,但是,请参阅我链接到的那一部分的上面的段落。
如果您使用的是Django> 1.5,则无法再使用get_profile
。
如果您有旧版应用,则应将其AUTH_PROFILE_MODULE = 'myapp.profile'
从中删除settings.py
。
如果您models.OneToOneField(User)
在Profile类中使用,则只需使用
{{ request.user.profile.whatever }}
在您的Django模板中
request
前面的键盘了?