在Jinja2中,如何testing一个variables是否是未定义的?

从Django转换,我习惯做这样的事情:

{% if not var1 %} {% endif %} 

如果我没有把var1放到上下文中,它就可以工作。 Jinja2给了我一个未定义的错误。 有没有简单的方法来说{% if var1 == None %}或类似?

从Jinja2 模板devise器文档 :

 {% if variable is defined %} value of variable: {{ variable }} {% else %} variable is not defined {% endif %} 

{% if variable is defined %}如果variables是None则为真。

由于not is None不被允许,这意味着

{% if variable != None %}

真的是你唯一的select。

在环境设置中,我们有undefined = StrictUndefined ,防止未定义的值被设置为任何东西。 这固定了它:

 from jinja2 import Undefined JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined } 

你也可以像这样在jinja2模板中定义一个variables:

 {% if step is not defined %} {% set step = 1 %} {% endif %} 

然后你可以像这样使用它:

 {% if step == 1 %} <div class="col-xs-3 bs-wizard-step active"> {% elif step > 1 %} <div class="col-xs-3 bs-wizard-step complete"> {% else %} <div class="col-xs-3 bs-wizard-step disabled"> {% endif %} 

否则(如果你不使用{% set step = 1 %} ),上面的代码会抛出:

 UndefinedError: 'step' is undefined 

{% if variable is defined %}工作来检查是否有未定义的东西。

如果你把variables默认为False,你可以使用{% if not var1 %}

 class MainHandler(BaseHandler): def get(self): var1 = self.request.get('var1', False) 

考虑使用默认筛选器,如果这是你所需要的。 例如:

 {% set host = jabber.host | default(default.host) -%} 

或类似的东西:

 {% set timeout = config.timeout | default(42) -%}