我无法将上下文处理器定义的变量的值与布尔值进行比较。
我有一个变量logged_in
,该变量用于确定用户是否已登录。在导航栏中(位于布局html文件(所有其他文件都从中继承)中找到)中有一个如果用户未登录,应该显示一个登录表单,如果用户已登录,则显示一个“注销”按钮。要访问logged_in
变量,我使用了上下文处理器。当我将此变量与True
或False
进行比较时,会发生问题。我最初的if
语句是:
{% if {{ logged_in }} == True %}
但是,当我运行它时,出现错误:
jinja2.exceptions.TemplateSyntaxError: expected token ':', got '}'
当我在{{ logged_in }}
周围加上引号时,错误消失了。但是,该语句始终为假。在将变量明确定义为True
之后,if语句将不会执行。如果我添加了如下引号:{% if "{{ logged_in }} == True" %}
,则即使log_in等于False
,也会始终执行if语句。我不确定问题出在哪里,因此这里是上下文处理器,以防万一:
@app.context_processor
def logged_in_status():
return dict(logged_in=logged_in)
这是整个if
语句的样子:
{% if {{ logged_in }} == True %}
<form class="form-inline my-2 my-lg-0" action="{{ url_for('logout') }}" method="POST">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">{{ logged_in }}</button>
</form>
{% else %}
<form class="form-inline my-2 my-lg-0" action="{{ url_for('login') }}" method="POST">
<input class="form-control mr-sm-2" name="username" type="text" placeholder="{{ logged_in }}" aria-label="username">
<input class="form-control mr-sm-2" name="password" type="password" placeholder="Password" aria-label="password">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Login</button>
</form>
{% endif %}
有什么建议吗?