从 Django 转换过来,我通常会这样做:
{% if not var1 %} {% endif %}
如果我没有将var1放入上下文中,要让它起作用。Jinja2会给我一个未定义的错误。有没有一种简单的方法来表示{% if var1 == None %}
或类似的内容?
从 Django 转换过来,我通常会这样做:
{% if not var1 %} {% endif %}
如果我没有将var1放入上下文中,要让它起作用。Jinja2会给我一个未定义的错误。有没有一种简单的方法来表示{% if var1 == None %}
或类似的内容?
以下内容来自 Jinja2 模板设计文档:
{% if variable is defined %}
value of variable: {{ variable }}
{% else %}
variable is not defined
{% endif %}
{% if variable is defined %}
是当变量为 None
时为真。
由于不允许使用 not is None
,这意味着
{% if variable != None %}
是你唯一的选择。
variable
在不为None时总是被评估为True,则{% if variable != None %}
等同于{% if variable %}
。 - azaleaNone
,请使用小写的none
,示例代码为:{% if variable is not none %}
。 - Felipe Alvarez你也可以在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 %}
),上面的代码就会抛出异常:
否则(如果您不使用{% set step = 1 %}
),上面的代码将会报错:
UndefinedError: 'step' is undefined
undefined = StrictUndefined
,这会防止未定义的值被设置为任何值。问题已通过以下方式得到解决:from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }
{% set host = jabber.host | default(default.host) -%}
{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}
我在Ansible中遇到了类似的问题。最终不得不对@Garret和@Carsten / @azalea的答案都进行测试,因此:
{% if variable is defined and variable %}
value of variable: {{ variable }}
{% else %}
variable is not defined or is falsy
{% endif %}
{% if variable is defined %}
用于检查某个变量是否未定义。
如果将变量默认为False,则可以使用{% if not var1 %}
。
class MainHandler(BaseHandler):
def get(self):
var1 = self.request.get('var1', False)
- debug:
msg: "Executed only if variable is defined"
when:
- variable is defined
{% if variable is not defined %}
来测试相反的情况。 - pbaranay{% if variable is defined and variable %}
将会检查是否为空。 - Vivektest: ~
,而你的解决方案可以识别它。谢谢 :) - Khaled