Définit la classe ListTemplate dans listetemplate.py.
Reprend la même idée que le module template mais en prévoyant un ingrédient de plus : nous aurons certains cas où il faudra représenter des tableaux ou des listes – exemple : listes des livres disponibles.
Vous pouvez tester le bon fonctionnement avec le module de test : listtemplate.test.py.
On a demandé une liste de livres et la BDD nous a répondu par :
[
{'id':1, 'titre':'Tintin au Tibet', 'auteur':'Hergé'},
{'id':2, 'titre':'Le rouge et le noir', 'auteur':'Stendhal'},
{'id':3, 'titre':'Robinson Crusoé', 'auteur':'William Defoe'},
...
]
Nous souhaitons pouvoir produire le code html d'un tableau suivant :
<table width=100% class='tableau-livres'>
<tr><th>Titre</th><th>Auteur</th></tr>
<tr><td>Tintin au Tibet</td><td>Hergé</td></tr>
<tr><td>Le rouge et le noir</td><td>Stendhal</td></tr>
<tr><td>Robinson Crusoé</td><td>William Defoe</td></tr>
...
</table>
Le tableau est constitué d'une entête, de lignes – une par item – et d'un pied.
Supposons qu'un tel template ait le nom liste-livres, on définira alors 3 fichiers *.tpl :
liste-livres.head.tpl contenant :<table width=100% class='tableau-livres'> <tr><th>Titre</th><th>Auteur</th></tr>
liste-livres.item.tpl contenant :
<tr><td>{titre}</td><td>{auteur}</td></tr>
liste-livres.foot.tpl contenant :</table>
Le traitement d'un tel template consistera à :
__init__(self, template_name:str), où template_name est le nom du template, sans l'extension,FOLDER = 'templates', indique le sous-répertoire où chercher les templatesHEAD = '.head.tpl', extension pour la partie head,ITEM = '.item.tpl', extension pour la partie item,FOOT = '.foot.tpl', extension pour la partie foot,get_template(self) qui renvoie un 3-uplets contenant les textes des 3 templates, "" si un template n'existe pas,render(self, data:dict, items:list) -> str qui remplit les templates avec les données fournies et les assemble. data est un un dictionnaire contenant les données pour l'ensemble du template, items une liste de de dictionnaires contenant les données pour chaque item. La méthode renvoie la page en version texte.