Il peut arriver que l’on est besoin de passer à ses templates des données sous la forme de tuple. Mais comment dans le template, récupéré les données qui sont dans le tuple ?
Question importante s’il en est.
Je vous rassure tout de suite, là réponse n’est pas ‘construire une classe qui sert à rien pour pouvoir faire instance.nom_donneée_membre. ‘
Il y en en fait deux méthodes.
Méthode 1
on peut unpack (désolé je n’ai pas trouvé de traduction françaises pour unpack) les tuples en utilisant la notation .NumeroChamp. Petit exemple :
tuples = [ ( foo, barr, tut ) , ( a , b , c ) , ( x, y , z ) ]
{% for tuple in tuples %}
{{ tuple.0 }} {{ tuple.1}} {{ tuple.2 }}
{% endfor %}
C’est déjà pas mal, mais c’est peu lisible. Il y a donc mieux, la méthode 2.
Méthode 2
Celle ci permet d’unpack directement vos tuples dans la boucle for, en donnant un nom à chaque variable. Dans ce cas là, il faut donc que chaque tuple est la même structure.
Imaginons par exemple que l’on construit des liens à la volée, avec des tuples qui contiendraient deux champ, l’url et le nom du lien, on aurait donc :
{% for url , name in tuples %}
<a href="{{url}} "> {{name}}</a>
{% endfor %}
Plutôt sympa non ?
Il peut arriver que l'on est besoin de passer à ses templates des données sous la forme de tuple. Mais comment dans le template, récupéré les données qui sont dans le tuple ?
Question importante s'il en est.
Je vous rassure tout de suite, là réponse n'est pas 'construire une classe qui sert à rien pour pouvoir faire instance.nom_donneée_membre. '
Il y en en fait deux méthodes.
Méthode 1
on peut unpack (désolé je n'ai pas trouvé de traduction françaises pour unpack) les tuples en utilisant la notation .NumeroChamp. Petit exemple :
[cc lang="python" escaped="true" tab_size="4"]
tuples = [ ( foo, barr, tut ) , ( a , b , c ) , ( x, y , z ) ]
{% for tuple in tuples %}
{{ tuple.0 }} {{ tuple.1}} {{ tuple.2 }}
{% endfor %}
[/cc]
C'est déjà pas mal, mais c'est peu lisible. Il y a donc mieux, la méthode 2.
Méthode 2
Celle ci permet d'unpack directement vos tuples dans la boucle for, en donnant un nom à chaque variable. Dans ce cas là, il faut donc que chaque tuple est la même structure.
Imaginons par exemple que l'on construit des liens à la volée, avec des tuples qui contiendraient deux champ, l'url et le nom du lien, on aurait donc :
[cc lang="python" escaped="true" tab_size="4"]
{% for url , name in tuples %}
{{name}}
{% endfor %}
[/cc]
Plutôt sympa non ?
Il y a quelque chose de très similaire en Ruby aussi. C’est vrai que c’est très pratique.