Utilisation de boucles récursives dans les templates

a marqué ce sujet comme résolu.

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

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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