Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
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
- constante
FOLDER = 'templates'pour le répertoire contenant les templates - constante
EXT = '.tpl'pour l'extension - méthode
__init__(self, template_name:str)oùtemplate_nameest le nom du template à utiliser (sans l'extension) - méthode
get_template(self)qui renvoie le contenu du fichier template s'il existe, ou""sinon. - méthode
render(self, data:dict) -> strrecevantdata, 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.
