Utilisation de boucles récursives dans les templates

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Pour vous présenter simplement mon problème, j'ai une structure de données telle que :

1
2
3
4
5
6
7
8
9
my_dict = {
    'key1': {
        'key2': ['element 1', 'element 2', 'element n'],
        'key3': {
            'key4': ['element 4']
         },
    },
    'key5': ['element 5']
}

J'aimerais la représenter en HTML comme ceci :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<ul>
    <li>key1</li>
    <ul>
        <li>key2</li>
        <ul>
             <li>element 1</li>
             <li>element 2</li>
             <li>element n</li>
        </ul>
        <li>key 4</li>
        <ul>
             <li>element 4</li>
        </ul>
   </ul>
   <li>key 5</li>
   <ul>
        <li>element 5</li>
   </ul>
</ul>

J'essaie de traduire cela en Jinja par :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{% for key in elements_list.keys() recursive %}
    {% if elements_list.keys() is mapping %}
        <li>{{ key }}</li>
        <ul>{{ loop(elements_list[key]) }}</ul>
    {% else %}
        {% for element in elements_list[key] %}
            <li>{{ element }}</li>
        {% endfor %}
    {% endif %}
{% endfor %}

En résumé, à chaque itération, si je tombe sur un dictionnaire, je réitère la boucle de manière récursive. Dans le cas contraire, j'ai affaire à une liste (Si vous connaissez le mot-clé pour détecter qu'il s'agit d'une liste en Jinja, je suis preneur) et j'itère tout simplement dessus.

Je n'obtiens évidemment pas le résultat escompté. Ce code affiche uniquement la première clef de niveau un, et la récursivité n'a pas lieu. En résumé, j'ai :

1
2
3
4
<ul>
    <li>key 1</li>
    <ul></ul>
</ul>

Merci par avance aux âmes charitables qui se pencheront sur mon problème. :)

Édité par anonyme

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte