在Tornado中处理未定义的模板变量

时间:2012-04-13 10:43:27

标签: python tornado

这是一个龙卷风模板(比如说,在文件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_error视为False,如果它不存在?

4 个答案:

答案 0 :(得分:17)

使用locals().get()进行黑客攻击是一种方法。另一个更正统的是使用try。 Tornado模板支持它,所以你可以:

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

答案 1 :(得分:15)

您可以使用

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

如果未设置属性,则用您想要的值替换False

答案 2 :(得分:1)

{%if locals()。get('logout_error',False)%}不起作用,因为变量未传递,如** kwargs;

{%if globals()。has_key('logout_error')%}对我有用,因为我的变量是单独传递的, https://groups.google.com/forum/#!topic/python-tornado/dyl50NO3yzE此页面对此问题有更多的讨论。

答案 3 :(得分:0)

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

解决方法:

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

{% if globals().get('grok_error', False) %}
  error message
{% end %}