Check if key exists in a Python dict in Jinja2 templates

I have a python dictionary:

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

This variable settings is then available in the Jinja2 template.

I want to check if a key myProperty exists in the settings dict within my template, and if so take some action:

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

What is the equivalent of hasKey that I can use?

97520 次浏览

This works fine doesn't work in cases involving dictionaries. In those cases, please see the answer by tshalif. Otherwise, with SaltStack (for example), you will get this error:

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

if you use this approach:

{% if settings.myProperty %}

note:
Will also skip, if settings.myProperty exists, but is evaluated as False (e.g. settings.myProperty = 0).

Like Mihai and karelv have noted, this works:

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

I get a 'dict object' has no attribute 'blabla' if I use {% if item.blabla %} and item does not contain a blabla key

You can test for key definition this way:

{% if settings.property is defined %}


#...
{% endif %}

Actually, in the style of Python, if you do a simple if statement, it will work:

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

Output:

Setting Foo: baz
Setting Hello: world

Cheers!