web-dev-qa-db-fra.com

Comment ajouter une nouvelle entrée dans un objet dictionnaire tout en utilisant jinja2?

Je ne suis pas en mesure d'ajouter une nouvelle entrée dans un objet dictionnaire lors de l'utilisation du modèle jinja2.

Par exemple, ici j'utilise le modèle jinja2 et j'ai créé une variable de données qui est un dictionnaire. Et après avoir vérifié certaines conditions si je [~ # ~] veux [~ # ~] pour ajouter un attribut d'emplacement à l'objet de données, par exemple.

{%- set data = {
                  'name' : node.Name,
                  'id' : node.id,
               }
-%}

{% if node.location !="" %}
    data.append({'location': node.location}) 
{% endif %}

Cependant, je n'ai pas pu trouver un moyen d'y parvenir et je reçois l'erreur UndefinedError:

jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'append'

Quelqu'un at-il rencontré ce problème ou pourrait fournir une référence pour résoudre ce problème?

J'ai cherché sur le Web mais je n'ai pas trouvé de solution, c'est-à-dire comment ajouter une entrée à l'objet dict dans le Jinja.

J'ai référé les ressources suivantes et d'autres ressources Web:

  1. http://cewing.github.io/training.codefellows/assignments/day22/jinja2_walkthrough.html
  2. Dans Jinja2, quel est le moyen le plus simple de définir toutes les clés pour qu'elles soient les valeurs d'un dictionnaire?
  3. https://github.com/saltstack/salt/issues/27494
14
hemant_maverik

Sans l'extension jinja2.ext.do, Vous pouvez le faire:

{% set x=my_dict.__setitem__("key", "value") %}

Ignorez la variable x et utilisez le dictionnaire qui est maintenant mis à jour.

UPD: Cela fonctionne également pour len() (__len__()), str() (__str__()), repr() (__repr__()) et bien d'autres choses similaires.

Les dictionnaires n'ont pas la méthode append. Vous pouvez cependant ajouter une paire clé-valeur comme ceci:

{% do data['location']=node.location %} 

ou

{% do data.update({'location': node.location}) %}
9
alpert

Points clés à retenir:

  1. le dictionnaire ne prend pas en charge append().
  2. Vous pouvez ajouter le nouvel élément au dictionnaire de données en utilisant {% do ... %} tag comme indiqué ici:

    {% do data.update({'location': node.location}) %}
    
  3. Cependant, pour que la balise "do" fonctionne correctement, vous devez ajouter le jinja2.ext.do extension à votre environnement jinja.

7
hemant_maverik