3.8 KiB
Templates
Vous pouvez utiliser n'importe quel moteur de templates avec FastAPI.
Un choix courant est Jinja2, le même que celui utilisé par Flask et d'autres outils.
Il existe des utilitaires pour le configurer facilement que vous pouvez utiliser directement dans votre application FastAPI (fournis par Starlette).
Installer les dépendances
Vous devez créer un environnement virtuel{.internal-link target=_blank}, l'activer, puis installer jinja2 :
$ pip install jinja2
---> 100%
Utiliser Jinja2Templates
- Importez
Jinja2Templates. - Créez un objet
templatesque vous pourrez réutiliser par la suite. - Déclarez un paramètre
Requestdans le chemin d'accès qui renverra un template. - Utilisez l'objet
templatesque vous avez créé pour rendre et retourner uneTemplateResponse, en transmettant le nom du template, l'objet de requête et un dictionnaire de « context » avec des paires clé-valeur à utiliser dans le template Jinja2.
{* ../../docs_src/templates/tutorial001_py310.py hl[4,11,15:18] *}
/// note | Remarque
Avant FastAPI 0.108.0 et Starlette 0.29.0, name était le premier paramètre.
De plus, auparavant, dans les versions précédentes, l'objet request faisait partie des paires clé-valeur du contexte pour Jinja2.
///
/// tip | Astuce
En déclarant response_class=HTMLResponse, l'interface de la documentation saura que la réponse sera en HTML.
///
/// note | Détails techniques
Vous pouvez aussi utiliser from starlette.templating import Jinja2Templates.
FastAPI expose le même starlette.templating sous fastapi.templating par simple commodité pour vous, développeur. Mais la plupart des réponses disponibles proviennent directement de Starlette. C'est également le cas pour Request et StaticFiles.
///
Écrire des templates
Vous pouvez ensuite écrire un template dans templates/item.html, par exemple :
{!../../docs_src/templates/templates/item.html!}
Valeurs de contexte du template
Dans le HTML qui contient :
{% raw %}
Item ID: {{ id }}
{% endraw %}
... il affichera l’id récupéré à partir du dict « context » que vous avez passé :
{"id": id}
Par exemple, avec un ID de 42, cela rendrait :
Item ID: 42
Arguments de url_for dans le template
Vous pouvez aussi utiliser url_for() dans le template ; elle prend en paramètres les mêmes arguments que ceux utilisés par votre fonction de chemin d'accès.
Ainsi, la section suivante :
{% raw %}
<a href="{{ url_for('read_item', id=id) }}">
{% endraw %}
... générera un lien vers la même URL que celle gérée par la fonction de chemin d'accès read_item(id=id).
Par exemple, avec un ID de 42, cela rendrait :
<a href="/items/42">
Templates et fichiers statiques
Vous pouvez aussi utiliser url_for() dans le template, par exemple avec les StaticFiles que vous avez montés avec name="static".
{!../../docs_src/templates/templates/item.html!}
Dans cet exemple, cela créera un lien vers un fichier CSS static/styles.css avec :
{!../../docs_src/templates/static/styles.css!}
Et comme vous utilisez StaticFiles, ce fichier CSS est servi automatiquement par votre application FastAPI à l’URL /static/styles.css.
En savoir plus
Pour plus de détails, y compris sur la façon de tester des templates, consultez la documentation de Starlette sur les templates.