web-dev-qa-db-fra.com

Vérifier si la clé existe dans un Python dict dans les modèles Jinja2

J'ai un python:

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

Cette variable settings est alors disponible dans le modèle Jinja2.

Je veux vérifier si une clé myProperty existe dans le settings dict de mon modèle, et si c'est le cas, prenez les mesures suivantes:

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

Quel est l'équivalent de hasKey que je peux utiliser?

42
Amal Antony

Comme Mihai et Karelv l'ont noté, cela fonctionne:

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

J'ai un 'dict object' has no attribute 'blabla' si j'utilise {% if item.blabla %} et item ne contient pas de clé blabla

101
tshalif

Cette fonctionne bien ne fonctionne pas dans les cas impliquant des dictionnaires. Dans ces cas, veuillez vous reporter à la réponse de tshalif. Sinon, avec SaltStack (par exemple), vous obtiendrez cette erreur:

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

si vous utilisez cette approche:

{% if settings.myProperty %}

note:
Sautera également, si settings.myProperty existe, mais est évalué comme False (par exemple, settings.myProperty = 0).

12
Mihai Zamfir

Vous pouvez tester la définition de clé de cette façon:

{% if settings.property is defined %}

#...
{% endif %}
7
ma3oun