從Django的轉換,我已經習慣了做這樣的事情:在Jinja2中,如何測試變量是否未定義?
{% if not var1 %} {% endif %}
且,如果我沒有把VAR1到上下文中工作。 Jinja2給了我一個未定義的錯誤。有沒有簡單的方法來說{% if var1 == None %}
或類似的?
從Django的轉換,我已經習慣了做這樣的事情:在Jinja2中,如何測試變量是否未定義?
{% if not var1 %} {% endif %}
且,如果我沒有把VAR1到上下文中工作。 Jinja2給了我一個未定義的錯誤。有沒有簡單的方法來說{% if var1 == None %}
或類似的?
從Jinja2的template designer documentation:
{% if variable is defined %}
value of variable: {{ variable }}
{% else %}
variable is not defined
{% endif %}
在環境設置中,我們有undefined = StrictUndefined
,它阻止將未定義的值設置爲任何值。這個固定:
from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }
{% if variable is defined %}
工作檢查,如果事情是不確定的。
你可以逃脫使用{% if not var1 %}
如果你默認你的變量爲False如
class MainHandler(BaseHandler):
def get(self):
var1 = self.request.get('var1', False)
你也可以在這樣的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
{% if variable is defined %}
是真實的。
由於not is None
被允許,這意味着
{% if variable != None %}
真的是你唯一的選擇。
考慮使用默認過濾器,如果它是你所需要的。例如:
{% set host = jabber.host | default(default.host) -%}
或類似的東西:
{% set timeout = config.timeout | default(42) -%}
謝謝!這也適用於Ansible模板! – dannyman 2015-04-23 17:37:25
@dannyman也許這是因爲可靠的模板是jinja2? – cherouvim 2016-12-14 10:44:09
我相信這是事實,但我的搜索條件往往不反映這一點。 – dannyman 2016-12-15 18:50:55