Cet article a pour but de présenter l'usage des templates itératifs en Python. Toutes les informations importantes se trouve dans l'article parent que je vous invite à consulter.
L'opération de base que doit assurer un système de template est de pouvoir effectuer des remplacements d'une clé par une valeur. Ce mode là est un mode "squelette", c.-à-d. qu'il va être utilisé dans la structure de base d'un site internet.
Par exemple : la page générale du site dans laquelle il y a une entête, un menu et un contenu. Le squelette va comporter toute la structure XHTML avec les trois éléments de contenu à remplir.
<h3><!--%titre%--></h3>
<p class="description">
<!--%description%-->
</p>
<address>
<!--%adresse%-->
</address>
data = {
'titre' : Titre
'adresse' : Rue des Catalans 38, 2800 Les Bois
'description' : Une <strong>description</strong> selon la <em>loi</em>.
}
Une description selon la loi.
Rue des Catalans 38, 2800 Les Bois
<h3>Titre</h3>
<p class="description">
Une <strong>description</strong> selon la <em>loi</em>.
</p>
<address>
Rue des Catalans 38, 2800 Les Bois
</address>
La boucle, second élément indispensable, dès qu'il s'agit d'interagir avec une banque de données. Cet élément n'ajoute pas beaucoup de complexité mais améliore grandement les possiblités d'utilisations.
Exemple d'utilisation : un fil RSS
contenant les dernières nouvelles/modifications d'un weblog où les éléments de la
boucle proviendrait d'une base de données SQL.
Ci-dessous l'exemple affiche un menu. Vous noterez la présence d'un if dont
l'usage est expliqué au point suivant.
Attention : si deux (ou plus) boucles ont le même nom, la seconde prendra le contenu de la première. En jouant avec ça, vous trouverez le moyen simple de générer un même contenu dans une page sans se fatiguer.
<ol><!--%loop:menu%-->
<li>
<a href="<!--%url%-->" <!--%if:['titre'] != ""%-->
title="<!--%titre%-->"<!--%endif%-->
><!--%texte%--></a>
</li><!--%endloop%-->
</ol>
list = [
{'url': 'http://www.lzi.ch', 'titre': 'Plop !', 'texte': 'LolZ'},
{'url': 'http://www.dosimple.ch', 'texte': 'doSimple'},
]
<ol>
<li>
<a href="http://www.lzi.ch"
title="Plop !"
>LolZ</a>
</li>
<li>
<a href="http://www.dosimple.ch"
>doSimple</a>
</li>
</ol>
Quand il s'agit d'amener un peu plus de flexibilité au niveau du résultat
difficile de faire l'impasse sur les instructions conditionnelles (if).
Ci-dessous, un exemple d'affiche l'information sur le nombre de commentaires de manière française (en évitant le trop vu et disgracieux 0 commentaire(s)).
<p><!--%if:['compteur'] == 0%-->
Aucun commentaire
<!--%elseif:['compteur'] == 1%-->
Un commentaire
<!--%elseif:['compteur'] == 2%-->
Deux commentaires
<!--%else%-->
<!--%compteur%--> commentaires
<!--%endif%--></p>
data = {
'compteur' : 2
}
Deux commentaires
<p>
Deux commentaires
</p>
Le meilleur est gardé pour la fin, la récursivité. L'outil indispensable pour afficher
une arborescence de fichiers, la carte d'un site ou autre. Mais cette efficacité n'est
pas évidente à manipuler et demande de ne pas s'y jeter à la légère. Un nœud de l'arbre
se forme ainsi : ({valeurs},[sous-branches]) alors qu'une
feuille (fin de l'arbre qui ne possède pas de branches) ainsi : ({valeurs},).
Un conseil, jetez un œil à la version utilisant PHP qui peut vous aider à comprendre le doux mix entre les listes et les dictionnaires.
<!--%recursion:biglist%-->
<ul><!--%recursion:loop%-->
<li>
<span style="<!--%if:['strong']%-->font-weight:bold;<!--%endif%--><!--%if:['em']==1%-->text-style:italic;<!--%endif%-->">
<!--%nom%--></span><!--%recursion:body%--></li><!--%recursion:endloop%-->
</ul><!--%endrecursion%-->
list = [
({'nom': 'Une'},),
({'nom': 'tres'},
[
({'nom': 'belle'},
[
({'nom': 'liste','strong' : 1, 'em' : 1},)
]
),
({'nom': 'et'},
[
({'nom': 'cool', 'em' : 1},)
]
),
({'nom': 'mais','strong':1},
[
({'nom': 'aussi'},
[
({'nom': 'génial.','em':1},)
]
)
]
)
]
)
]
<ul>
<li>
<span style="">
Une</span></li>
<li>
<span style="">
tres</span>
<ul>
<li>
<span style="">
belle</span>
<ul>
<li>
<span style="font-weight:bold;text-style:italic;">
liste</span></li>
</ul></li>
<li>
<span style="">
et</span>
<ul>
<li>
<span style="text-style:italic;">
cool</span></li>
</ul></li>
<li>
<span style="font-weight:bold;">
mais</span>
<ul>
<li>
<span style="">
aussi</span>
<ul>
<li>
<span style="text-style:italic;">
génial.</span></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
Le 13 avril 2005, par Yoan Blanc, doSimple.ch