====== 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%%'' {titre}
Ceci est l'entête, c'est le bon endroit pour mettre un menu !

Exemple de fichier template. Le titre de la page est {titre}.

J'ai choisi le numéro : {numero}

Ceci est le pied de page, ce serait bien qu'il soit identique sur toutes les pages.
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_name%%'' est 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) -> 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.