Doc de Jinja :
Les templates sont généralement placés dans un dossier /templates
/home/marc/mon_projet ├── venv │ └── ... ├── templates │ └── index.html └── app.py
La fonction render_template :
from flask import render_template @app.route("/") def home(): return render_template("index.html")
Passage de valeurs au template :
<h1>{{titre}}</h1> <p>{{contenu}}</p>
@app.route("/article/<id>") def article(id): return render_template( "article.html", titre = "Article n°%s" % id, contenu = "Contenu de l'article..." )
Template de base :
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{% block pagetitle %}{% endblock %}</title> </head> <body> {% block body %}{% endblock %} </body> </html>
Template pour l'affichage d'un article ; ce template hérite de base.html :
{% extends "base.html" %} {% block pagetitle %} Article : {{titre}} {% endblock %} {% block body %} <h1>{{titre}}</h1> <p>{{contenu}}</p> {% endblock %}
Exemple : un menu déclaré sous forme de tableau JSON dont le rendu est effectué dans un boucle.
{% set items = [ { "title": "Accueil", "url": url_for('home') }, { "title": "Admin", "url": url_for('admin') } ] %} <ul class="nav"> {% for item in items %} <li class="nav-item"> <a class="nav-link" href="{{ item.url }}"> {{ item.title }} </> </li> {% endfor %} </ul>
{% macro menu_item(title, url) -%} <li class="nav-item"> <a class="nav-link" href="{{ url }}"> {{ title }} </a> </li> {%- endmacro %} <ul class="nav"> {{ menu_item("Accueil", url_for('home')) }} {{ menu_item("Admin", url_for('admin')) }} </ul>
Si les macros sont stockées dans un fichier séparé, utiliser la commande import et préfixer les appels d'un alias :
{% import "macros.html" as m %} {{ m.menu_item("Exemple", url_for('test')) }}
Pour afficher le contenu d'un dictionnaire dans un tableau, l'important est d'appeler la méthode items() du dictionnaire lorsqu'on veut le parcourir dans une boucle :
@app.route("/test") def test(): return render_template("test.html", dictionnaire = { 'nom' : 'Dupont', 'prenom': 'Albert', 'ville' : 'Bourg-les-Endives', ... : ... } )
Pour accéder à la configuration de l'application, utiliser la variable config :
<p>Environnement: {{config['ENV']}}</p> - ou - <p>Environnement: {{config.ENV}}</p>
{% if config.ENV = 'development' %} <script src="version_de_developpement.js"> {% else %} <script src="version_de_production.js"> {% endif %}