检查键是否存在于 Jinja2 模板中的 Python 字典中

Check if key exists in a Python dict in Jinja2 templates

我有一本 python 字典:

settings = {
   "foo" : "baz",
   "hello" : "world"
}

这个变量 settings 然后在 Jinja2 模板中可用。

我想检查我的模板中的 settings 字典中是否存在键 myProperty,如果存在,请采取一些措施:

{% if settings.hasKey(myProperty) %}
   takeSomeAction();
{% endif %}

我可以使用 hasKey 的等价物是什么?

这个工作正常在涉及字典的情况下不起作用。在这些情况下,请参阅 tshalif 的回答。 否则,使用 SaltStack(例如),您将收到此错误:

Unable to manage file: Jinja variable 'dict object' has no attribute '[attributeName]'

如果您使用这种方法:

{% if settings.myProperty %}

注意:
如果 settings.myProperty 存在,但被评估为 False(例如 settings.myProperty = 0),也会跳过。

正如 Mihai 和 karelv 指出的那样,这个有效:

{% if 'blabla' in item %}
  ...
{% endif %}

如果我使用 {% if item.blabla %} 并且 item 不包含 blabla 密钥,我会得到一个 'dict object' has no attribute 'blabla'

您可以这样测试键定义:

{% if settings.property is defined %}

#...
{% endif %}

实际上,按照Python的风格,如果你做一个简单的if语句,它会起作用:

{% if settings.foo %}
Setting Foo: {{ settings.foo }}
{% endif %}
{% if settings.bar %}
Setting Bar: {{ settings.bar }}
{% endif %}
{% if settings.hello %}
Setting Hello: {{ settings.hello }}
{% endif %}

输出:

Setting Foo: baz
Setting Hello: world

干杯!