web-dev-qa-db-fra.com

Comment parcourir une liste de dictionnaires dans un modèle jinja?

J'ai essayé:

list1 = [{"username": "abhi", "pass": 2087}]
return render_template("file_output.html", list1=list1)

Dans le modèle:

<table border=2>
  <tr>
    <td>
      Key
    </td>
    <td>
      Value
    </td>
  </tr>
  {% for dictionary in list1 %}
    {% for key in dictionary %}
      <tr>
        <td>
          <h3>{{ key }}</h3>
        </td>
        <td>
          <h3>{{ dictionary[key] }}</h3>
        </td>
      </tr>
    {% endfor %}
  {% endfor %}
</table>

Le code ci-dessus divise chaque élément en plusieurs caractères:

[

{

"

u

s

e

r

...

J'ai testé la boucle imbriquée ci-dessus dans un simple script Python) et il fonctionne correctement, mais pas dans le modèle Jinja.

47
user3089927

Les données:

parent_dict = [{'A':'val1','B':'val2'},{'C':'val3','D':'val4'}]

dans l'itération Jinja2:

{% for dict_item in parent_dict %}
   {% for key, value in dict_item.items() %}
      <h1>Key: {{key}}</h1>
      <h2>Value: {{value}}</h2>
   {% endfor %}
{% endfor %}

Remarque:

assurez-vous que vous avez la liste des éléments dict. Si vous obtenez UnicodeError, la valeur à l'intérieur du dict contient le format Unicode. Ce problème peut être résolu dans votre views.py si le dict est unicode objet, vous devez encoder dans utf-8

109
Nava

Dans la note de @Navaneethan, Jinja2 est capable de faire des sélections "régulières" d’éléments pour la liste et le dictionnaire, étant donné que nous connaissons la clé du dictionnaire ou les emplacements des éléments dans la liste.

Les données:

parent_dict = [{'A':'val1','B':'val2', 'content': [["1.1", "2.2"]]},{'A':'val3','B':'val4', 'content': [["3.3", "4.4"]]}]

dans l'itération Jinja2:

{% for dict_item in parent_dict %}
   This example has {{dict_item['A']}} and {{dict_item['B']}}:
       with the content --
       {% for item in dict_item['content'] %}{{item[0]}} and {{item[1]}}{% endfor %}.
{% endfor %}

La sortie rendue:

This example has val1 and val2:
    with the content --
    1.1 and 2.2.

This example has val3 and val4:
   with the content --
   3.3 and 4.4.
15
Chris.Q
{% for i in yourlist %}
  {% for k,v in i.items() %}
    {# do what you want here #}
  {% endfor %}
{% endfor %}
8
corvid