API de rendu de template Flask

Flask utilise le moteur Jinja2 pour rendre les templates, en intégrant les données Python dans les pages HTML.

Les fichiers de template sont par défaut placés dans le répertoire racine du projettemplates/dans le dossier.


render_template

La fonction de rendu de template la plus couramment utilisée, charge un template depuis un fichier et le rend.

Paramètre Type Description
template_name_or_list str / list Nom de fichier du template (relatif au dossier templates), ou une liste de noms de templates (renvoie le premier qui existe).
**context Arguments nommés Variables transmises au template, telles que title="Hello", user=user_obj

Toutes les fonctions de rendu

Fonction Description
render_template(template_name_or_list, **context) Effectue le rendu d'un template à partir d'un fichier, renvoie une chaîne HTML.
render_template_string(source, **context) Rend un template à partir d’une chaîne, adapté aux templates intégrés.
stream_template(template_name_or_list, **context) Diffuse le template rendu, renvoie un générateur. Adapté aux pages volumineuses.
stream_template_string(source, **context) Rendu en flux des templates de chaînes
get_template_attribute(template_name, attribute) Récupère une macro ou une variable depuis le template. Permet d’appeler des macros Jinja2 depuis Python.

Objets intégrés dans les templates

Les objets suivants sont disponibles dans les templates sans être passés explicitement :

Object Description
request Objet de requête actuel
session Objet de session actuel
g Objet global au niveau de la requête
config Dictionnaire de configuration de l’application
url_for Fonction de génération d'URL
get_flashed_messages Fonction de récupération des messages Flask

Exemples de code

Exemple

from flask import Flask, render_template, render_template_string

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html",
                          title=EXEMPLE Accueil,
                          posts=[{"id": 1, "title": Article A},
                                 {"id": 2, "title": Article B}])

@app.route("/inline")
def inline_template():
    # Effectuer le rendu à partir d'une chaîne (contenu du modèle écrit directement dans le code)
    return render_template_string("""
        <h1>Bonjour, {{ name }}!</h1>
        <p>Bienvenue sur EXAMPLE.</p>
    """
, name="Monde")

@app.route("/stream")
def stream_large_page():
    # Rendu en flux de grandes pages, génération et envoi à la volée
    return stream_template("large_report.html",
                          items=get_10k_items())
autres extensions