Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| dev:python:flask:templates [2026/03/28 11:07] – yoann | dev:python:flask:templates [2026/04/10 06:09] (Version actuelle) – yoann | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | : | ||
| ====== Flask : Utilisation des templates ====== | ====== Flask : Utilisation des templates ====== | ||
| Ligne 8: | Ligne 7: | ||
| ===== Généralités ===== | ===== Généralités ===== | ||
| - | Grossièrement, | + | Grossièrement, |
| **Flask** s' | **Flask** s' | ||
| - | * '' | + | * '' |
| * '' | * '' | ||
| * '' | * '' | ||
| Ligne 18: | Ligne 17: | ||
| - | <code html> | + | <code html [highlight_lines_extra=" |
| < | < | ||
| <html lang=" | <html lang=" | ||
| Ligne 70: | Ligne 69: | ||
| - | ===== La fonction url_for() ===== | + | ===== La fonction |
| - | Depuis le template on peut utiliser la fonction helper **'' | ||
| - | Dans notre projet Flask, on a une fonction nommée par exemple '' | + | Si les liens vers les autres pages sont définis en dur dans les templates, ils deviendront invalides lorsque les routes de l' |
| + | |||
| + | C'est pourquoi il est recommandé d' | ||
| + | |||
| + | L' | ||
| + | |||
| + | |||
| + | Dans notre projet Flask, on a une fonction nommée par exemple '' | ||
| <code python> | <code python> | ||
| @app.route('/ | @app.route('/ | ||
| - | def new_universe(): | + | def create_universe(): |
| if request.method == ' | if request.method == ' | ||
| ... | ... | ||
| Ligne 87: | Ligne 92: | ||
| <code html> | <code html> | ||
| ... | ... | ||
| - | <a href=" | + | <a href=" |
| ... | ... | ||
| </ | </ | ||
| - | ===== Le système de filtre | + | ===== Héritage |
| + | La notion d' | ||
| + | * On définit un template parent contenant des **placeholders** ; | ||
| + | * Chaque enfant héritant du document parent devra définit le contenu des **placeholders** ; | ||
| - | ===== Notion d' | ||
| - | Le document | + | * En général on définit un document |
| + | * Chaque enfant complète les placeholders pour produire la réponse | ||
| - | * On crée un document contenant des sections vides nommées avec la syntaxe | ||
| + | Un exemple de document parent avec en surbrillance la définition des placeholders : | ||
| + | |||
| + | <code html base.html [highlight_lines_extra=" | ||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | < | ||
| + | <meta name=" | ||
| + | <meta name=" | ||
| + | <link rel=" | ||
| + | <link rel=" | ||
| + | <link rel=" | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | <nav> | ||
| + | <!-- barre de navigation --> | ||
| + | <a href="#"> | ||
| + | <a href="#"> | ||
| + | <a href="#"> | ||
| + | </ | ||
| + | <div class=" | ||
| + | {% block content %}{% endblock %} | ||
| + | </ | ||
| + | < | ||
| + | <!-- contenu statique du pied de page --> | ||
| + | </ | ||
| + | <script src=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Un exemple de document enfant : | ||
| + | |||
| + | <code html index.html [highlight_lines_extra=" | ||
| + | {% extends ' | ||
| + | {# | ||
| + | Hérite du template " | ||
| + | doit redéfinir les placeholders : " | ||
| + | #} | ||
| + | |||
| + | {% block content %} | ||
| + | < | ||
| + | <!-- section messages flash --> | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | <p>{{ msg }}</ | ||
| + | </ | ||
| + | < | ||
| + | <!-- section status --> | ||
| + | </ | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Dans le template enfant, le block " | ||
| + | </ | ||
| + | |||
| + | La [[# | ||
| + | |||
| + | ===== Boucles et conditions ===== | ||
| + | |||
| + | Le moteur de template supporte la boucle '' | ||
| + | |||
| + | <code html [highlight_lines_extra=" | ||
| + | {% extends ' | ||
| + | {# | ||
| + | Hérite du template " | ||
| + | doit redéfinir les placeholders : title et content | ||
| + | #} | ||
| + | |||
| + | {% block content %} | ||
| + | < | ||
| + | <!-- section messages flash --> | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | <p>{{ msg }}</ | ||
| + | <!-- Affiche tous les commentaires --> | ||
| + | <div style=" | ||
| + | {% for comment in comments %} | ||
| + | <div style=" | ||
| + | <p style=" | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | </ | ||
| + | < | ||
| + | <!-- section status --> | ||
| + | </ | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | |||
| + | La variable comments devra être fournie par la vue au template : | ||
| + | |||
| + | <code python> | ||
| + | @app.route('/' | ||
| + | @app.route('/ | ||
| + | def supply_index() -> str: | ||
| + | msg = "Hello World !!!" | ||
| + | comments = [ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | return render_template(' | ||
| + | </ | ||
| + | |||
| + | |||
| + | La structure conditionnelle '' | ||
| + | <code html [highlight_lines_extra=" | ||
| + | {% extends ' | ||
| + | {# | ||
| + | Hérite du template " | ||
| + | doit redéfinir les placeholders : title et content | ||
| + | #} | ||
| + | |||
| + | {% block content %} | ||
| + | < | ||
| + | <!-- section messages flash --> | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | <p>{{ msg }}</ | ||
| + | <!-- Affiche tous les commentaires --> | ||
| + | <div style=" | ||
| + | {% for comment in comments %} | ||
| + | {% if loop.index % 2 == 0 %} | ||
| + | {% set bg_color = '# | ||
| + | {% else %} | ||
| + | {% set bg_color = '# | ||
| + | {% endif %} | ||
| + | <div style=" | ||
| + | <p style=" | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | </ | ||
| + | < | ||
| + | <!-- section status --> | ||
| + | </ | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | |||
| + | ===== Filtres Jinja2 ===== | ||
| + | |||
| + | Les filtres Jinja permettent d' | ||
| + | |||
| + | <code html> | ||
| + | <div style=" | ||
| + | <!-- Affiche le commentaire en majuscules --> | ||
| + | <p style=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Le filtre '' | ||
| + | |||
| + | <code html> | ||
| + | {# Ici les balises sont échappées par le moteur Jinja : elles seront affichées comme du texte #} | ||
| + | {{ "< | ||
| + | |||
| + | {# le filtre safe permet d' | ||
| + | {{ "< | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Les valeurs saisies ou retournées par l' | ||
| + | </ | ||
| ===== Formater la date dans le template ===== | ===== Formater la date dans le template ===== | ||