14

这是一个龙卷风模板(例如,在文件 logout.html 中)我在注销过程中出现错误时呈现:

  {% if logout_error %}
    Oops! The logout failed. Please close all open documents and try again
  {% end %}

这可以使用

self.render("logout.html", logout_error=True)

如果注销成功,我必须这样做

self.render("logout.html", logout_error=False)

如果我忽略logout_error=False,我会得到

NameError: global name 'logout_error' is not defined

如果有很多标志(为假),则关键字参数可能会堆积起来。有没有办法让模板认为logout_errorFalse不存在?

4

4 回答 4

17

黑客使用locals().get()是一种方法。另一个更正统的方法是使用try. Tornado 模板支持它,因此您可以:

{% try %}
  {% if logout_error %}
    Oops! The logout failed. Please close all open documents and try again
  {% end %}
{% except %}
{% end %}
于 2012-04-13T13:27:27.083 回答
15

您可以使用

{% if locals().get('logout_error', False) %}

False如果未设置属性,则替换为所需的值。

于 2012-04-13T10:50:11.063 回答
1

{% if locals().get('logout_error', False) %} not works because variables not passed as in **kwargs;

{% if globals().has_key('logout_error') %} works to me because my variables are passed separately, https://groups.google.com/forum/#!topic/python-tornado/dyl50NO3yzE this page has more disscussion on this problem.

于 2014-10-24T10:30:40.420 回答
0

“龙卷风方式”是没有未声明的变量。显式声明变量更加禅宗。

解决方法:

{% if 'grok' in globals() %}
  {{grok}}
{% end %}

{% if globals().get('grok_error', False) %}
  error message
{% end %}
于 2015-11-03T13:50:40.863 回答