检查键是否存在于 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
干杯!
我有一本 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
干杯!