Table des matières

Module template

Ce module est écrit dans le fichier template.py et définit une classe Template.

Vous pouvez tester le bon fonctionnement avec le module de test : template.test.py.

Template signifie Modèle.

À quoi sert un template ?

On souhaite que le serveur, programmé en Python, produise des fichiers html mais on ne veut pas écrire les lignes de html directement dans le programme. Pourquoi ?

Il s'agit de séparer deux choses. Le code html contient des éléments de styles, du graphique, c'est un travail de graphiste. Il est courant que des graphistes fassent des sites web. Le code Python est le travail du programmeur. Chacun son métier. Tout ce qui est mise en forme est mis à part.

Exemple de template

Voici un exemple de fichier template – on choisit l'extension *.tpl

<!DOCTYPE html>
<!-- fichier templates/exemple.tpl -->
<html>
  <head>
    <meta charset="utf8">
    <title>{titre}</title>
    <link href="./styles.css" media="screen" rel="stylesheet" type="text/css" />
    <link rel="icon" href="livres.png" />
  </head>
  <body>
    <div class="head">
      Ceci est l'entête, c'est le bon endroit pour mettre un menu !
    </div>
      <p>Exemple de fichier template. Le titre de la page est {titre}.</p>
      <p>J'ai choisi le numéro : {numero}</p>
    <div class="foot">
      Ceci est le pied de page, ce serait bien qu'il soit identique sur toutes les pages.
    </div>
  </body>
</html>

Ce fichier est dans l'ensemble un fichier html mais il contient des emplacement prévus pour être complétés. Il compte deux emplacement {titre} et un emplacement {numero}. J'ai choisi de représenter ces emplacements de cette façon car cela va rendre le travail très simple, avec la fonction format de Python.

Utiliser le template

Supposons que la variable tpl_content contienne le texte ci-dessus. La commande html.format(titre='le titre', numero = '19') va produire le même texte avec toutes les occurrences de {titre} et de {numero} remplacées.

On peut aussi l'écrire ainsi : avec data = {'titre':'le titre', 'numero':'19'} on fera html.format(**data), les ** étant ici une notation spéciale que je détaillerai au besoin.

Le module template requiert le module filemanager.

Interface de la classe Template

Attention : Il faut que les clés de data correspondent aux emplacements dans le template – il peut y en avoir en plus dans data mais pas en moins.