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.
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.
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.
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.
FOLDER = 'templates' pour le répertoire contenant les templatesEXT = '.tpl' pour l'extension__init__(self, template_name:str) où template_name est le nom du template à utiliser (sans l'extension)get_template(self) qui renvoie le contenu du fichier template s'il existe, ou "" sinon.render(self, data:dict) -> str recevant data, le dictionnaire contenant les données et qui retourne le template avec les trous complétés.
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.