====== Module listtemplate ======
Définit la classe ''%%ListTemplate%%'' dans ''%%listetemplate.py%%''.
Reprend la même idée que le module [[template|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 |}}.
===== Exemple =====
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 :
| Titre | Auteur |
| Tintin au Tibet | Hergé |
| Le rouge et le noir | Stendhal |
| Robinson Crusoé | William Defoe |
...
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 :
| Titre | Auteur |
* ''%%liste-livres.item.tpl%%'' contenant :
| {titre} | {auteur} |
* ''%%liste-livres.foot.tpl%%'' contenant :
Le traitement d'un tel template consistera à :
- produire l'entête,
- le texte pour chaque item,
- le pied,
- coller tout ensemble et renvoyer le résultat.
===== Interface de la classe ListTemplate =====
* méthode ''%%__init__(self, template_name:str)%%'', où ''%%template_name%%'' est le nom du template, sans l'extension,
* constante ''%%FOLDER = 'templates'%%'', indique le sous-répertoire où chercher les templates
* constante ''%%HEAD = '.head.tpl'%%'', extension pour la partie head,
* constante ''%%ITEM = '.item.tpl'%%'', extension pour la partie item,
* constante ''%%FOOT = '.foot.tpl'%%'', extension pour la partie foot,
* méthode ''%%get_template(self)%%'' qui renvoie un 3-uplets contenant les textes des 3 templates, ''%%""%%'' si un template n'existe pas,
* méthode ''%%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.