====== 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 : ...
TitreAuteur
Tintin au TibetHergé
Le rouge et le noirStendhal
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 : * ''%%liste-livres.item.tpl%%'' contenant : * ''%%liste-livres.foot.tpl%%'' contenant :
TitreAuteur
{titre}{auteur}
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.