2010-10-01 51 views
98

從Django的轉換,我已經習慣了做這樣的事情:在Jinja2中,如何測試變量是否未定義?

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

且,如果我沒有把VAR1到上下文中工作。 Jinja2給了我一個未定義的錯誤。有沒有簡單的方法來說{% if var1 == None %}或類似的?

回答

169

從Jinja2的template designer documentation

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

謝謝!這也適用於Ansible模板! – dannyman 2015-04-23 17:37:25

+2

@dannyman也許這是因爲可靠的模板是jinja2? – cherouvim 2016-12-14 10:44:09

+0

我相信這是事實,但我的搜索條件往往不反映這一點。 – dannyman 2016-12-15 18:50:55

9

在環境設置中,我們有undefined = StrictUndefined,它阻止將未定義的值設置爲任何值。這個固定:

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

{% if variable is defined %}工作檢查,如果事情是不確定的。

你可以逃脫使用{% if not var1 %}如果你默認你的變量爲False如

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

你也可以在這樣的Jinja2的模板定義一個變量:

{% 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 %})上的代碼將拋出:如果變量是None

UndefinedError: 'step' is undefined 
11

{% if variable is defined %}是真實的。

由於not is None被允許,這意味着

{% if variable != None %}

真的是你唯一的選擇。

1

考慮使用默認過濾器,如果它是你所需要的。例如:

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

或類似的東西:

{% set timeout = config.timeout | default(42) -%} 
相關問題