Outils pour utilisateurs

Outils du site


nsi:tds:serveur_web20:listtemplate

Module listtemplate

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.

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 :

<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 à :

  1. produire l'entête,
  2. le texte pour chaque item,
  3. le pied,
  4. 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.
nsi/tds/serveur_web20/listtemplate.txt · Dernière modification : de goupillwiki