在 Jinja2 中,如何测试变量是否未定义?
从 Django 转换后,我习惯于做这样的事情:
{% if not var1 %} {% endif %}
如果我没有将 var1 放入上下文中,它就会工作。 Jinja2 给我一个未定义的错误。有没有一种简单的方法可以表达 {% if var1 == None %}
或类似的内容?
Converting from Django, I'm used to doing something like this:
{% if not var1 %} {% endif %}
and having it work if I didn't put var1 into the context. Jinja2 gives me an undefined error. Is there an easy way to say {% if var1 == None %}
or similar?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
来自 Jinja2 模板设计器文档:
From the Jinja2 template designer documentation:
如果变量为
None
,则{% if variable is Define %}
为 true。由于不允许
not is None
,这意味着{% if variable != None %}
实际上是您唯一的选择。
{% if variable is defined %}
is true if the variable isNone
.Since
not is None
is not allowed, that means that{% if variable != None %}
is really your only option.
您还可以在 jinja2 模板中定义一个变量,如下所示:
然后您可以像这样使用它:
否则(如果您不使用
{% set step = 1 %}
),上面的代码将扔:You could also define a variable in a jinja2 template like this:
And then You can use it like this:
Otherwise (if You wouldn't use
{% set step = 1 %}
) the upper code would throw:您可以使用 Jinja Elvis 运算符
或另外检查空性
Jinja 模板 - 模板设计器文档
You can use kind of Jinja Elvis operator
or additionally check emptiness
Jinja templates - Template Designer Documentation
在环境设置中,我们设置了
undefined = StrictUndefined
,这可以防止将未定义的值设置为任何值。这修复了它:In the Environment setup, we had
undefined = StrictUndefined
, which prevented undefined values from being set to anything. This fixed it:如果您需要的话,请考虑使用默认过滤器。例如:
或者使用更多后备值,并在末尾添加“硬编码”值,例如:
Consider using default filter if it is what you need. For example:
or use more fallback values with "hardcoded" one at the end like:
{% if variable is Defined %}
用于检查某些内容是否未定义。如果您将变量默认为 False,则可以使用
{% if not var1 %}
来逃脱,例如{% if variable is defined %}
works to check if something is undefined.You can get away with using
{% if not var1 %}
if you default your variables to False eg我在 Ansible 中遇到了这样的问题。最终必须对 @Garret 和 @Carsten / @azalea 答案进行测试,所以:
I had an issue like this in Ansible. Ended up having to do a test on both @Garret and @Carsten / @azalea answers, so:
你可以这样做:
You can do this :