我对Django中 request.user 引用的内容感到困惑? 它是指 auth_user 表中的用户名字段还是引用用户模型实例?
我有这个疑问,因为我无法使用{{request.user.username}}
或{{user.username}}
访问模板中的电子邮件字段。
所以我在视图文件中执行了以下操作:
userr = User.objects.get(username=request.user)
并将userr
传递给模板,并将访问的电子邮件字段设为{{ userr.email }}
。
虽然它有效,但我希望对此有所了解。
答案 0 :(得分:11)
request.user
是用户模型对象。
如果未明确传递request
,则无法在模板中访问请求对象。
如果要从模板访问用户对象,则应将其传递给模板或使用RequestContext。
答案 1 :(得分:10)
如果您的模板正在接收AnonymousUser,则无法找到对{{request.user.email}}
的引用。以前,您必须询问{{request.user.is_authenticated }}
。
您必须检查django.core.context_processors.auth
部分设置中是否包含TEMPLATE_CONTEXT_PROCESSORS
上下文处理器。如果您使用的是Django 1.4或最新版本,则上下文处理器为django.contrib.auth.context_processors.auth
。该上下文处理器负责在每个请求中包含用户对象。
答案 2 :(得分:2)
这取决于你设定的内容。
所以,最好使用
user = User.objects.get(username=request.user.username)
实际上,如果您将'django.core.context_processors.request'
附加到TEMPLATE_CONTEXT_PROCESSORS
settings.py
列表中,则无需定义此类变量
如果您在render
views.py
,则可以在模板中访问变量{{request.user.username}}
答案 3 :(得分:0)
request.user引用实际的用户模型实例。
request.user.FIELDNAME将允许您访问用户模型的所有字段