Check if key exists in a Python dict in Jinja2 templates

Question:

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?

Asked By: Amal Antony

||

Answers:

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).

Answered By: Mihai Zamfir

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

Answered By: tshalif

You can test for key definition this way:

{% if settings.property is defined %}

#...
{% endif %}
Answered By: ma3oun

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!

Answered By: NFSpeedy
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.