使用请求发送上下文,{%if%}无法正常工作

时间:2016-09-04 03:58:54

标签: django

我有一个问题,试图弄清楚为什么以下会呈现一个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 %}

2 个答案:

答案 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,用户名将显示在模板中。