我有一个问题,试图弄清楚为什么以下会呈现一个html页面显示' hi'和1,而不仅仅是1.
观察方法。
def index(request):
context = {
'test' : 1,
}
return render(request, 'index.html', context)
模板html。渲染index.html将显示' hi'然而,在上下文中没有用户,为什么if用户会通过?
{% if user %}
<h1>hi</h1>
{% endif %}
{% if test %}
<h1>{{ test }}</h1>
{% endif %}
答案 0 :(得分:2)
答案是Django的内置上下文处理器django.contrib.auth.context_processors.auth
。它默认启用,这意味着代表当前登录用户的auth.User
对象会自动发送到名为user
的所有模板。
来自docs:
context_processors 选项是一个可调用的列表 - 称为上下文处理器 - 将请求对象作为其参数,并返回要合并到上下文中的项的字典。 在默认生成的设置文件中,默认模板引擎包含以下上下文处理器:
[
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
]
答案 1 :(得分:1)
如果有用户登录,则django将创建表示当前登录用户的AUTH_USER_MODEL。此外,您还可以从请求对象访问用户模型,而无需指定上下文。例如,如果用户已登录,则可以执行request.user.username,用户名将显示在模板中。