Reputation: 6807
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?
Upvotes: 102
Views: 131346
Reputation: 171
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!
Upvotes: 1
Reputation: 2166
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
).
Upvotes: 15
Reputation: 3790
You can test for key definition this way:
{% if settings.property is defined %}
#...
{% endif %}
Upvotes: 41
Reputation: 2612
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
Upvotes: 195