Ceci est une ancienne révision du document !
Grossièrement, le template est une page web à trous. Il contient des sections statiques en HTML/javascript directement interprétables par le navigateur web et des section non remplies désignées placeholders. Le contenu des placeholders est généré par l'application à l'exécution pour obtenir un comportement dynamique.
Flask s'appuie sur le moteur Jinja2 pour la gestion des templates. Plusieurs éléments syntaxiques sont disponibles pour délimiter les sections à l'attention du moteur de templates :
{{ }} Affiche le résultat du code Python ;{% %} Code Python à interpréter ;{# #} Commentaires.<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>FlaskApp</title> </head> <body> {# Affiche le contenu de la variable msg comme titre #} <h1>{{ msg }}</h1> <h2>Welcome to FlaskApp!</h2> </body> </html>
Pour pouvoir générer la partie dynamique du template via le framework Flask, on utilise la fonction helper render_template(). Effectuer le rendu du template, c'est générer le contenu des placeholders pour produire une page web complète pouvant être retournée au client.
./templates de l'application.
from flask import Flask, render_template # ... @app.route('/') def supply_index() -> str: msg = "Hello World !!!" return render_template('index.html', msg=msg)
A l'intérieur des templates les objets suivants sont disponibles :
Les fonctions url_for() et get_flashed_messages() sont également disponibles.
Depuis le template on peut utiliser la fonction helper url_for() pour créer un lien vers une autre page : l'argument est le nom de la fonction associée à la route :
Dans notre projet Flask, on a une fonction nommée par exemple new_universe :
@app.route('/create/universe', methods=['GET', 'POST']) def new_universe(): if request.method == 'POST': ...
Cette fonction est associée à la route /create/universe. Dans notre template si on souhaite créer le lien vers cette page on peut produire le code suivant :
... <a href="{{ url_for('new_universe') }}" class="active tm-paging-link">+</a> ...
Le document de base contient du code HTML pouvant être partagé par d'autres pages (factorisation).
Le plus simple est d'appeler la méthode strftime() sur l'objet de type datetime :
<div> <span>{{ universe.created_on.strftime('%d-%m-%Y') }}</span> </div>