Créer des filtres personnalisés Jinja pour une utilisation dans les applications Flask peut être une pratique extrêmement utile pour personnaliser le rendu des données dans vos modèles HTML. Jinja est un moteur de template pour Python qui est souvent utilisé avec Flask pour générer des pages web dynamiques. Les filtres Jinja vous permettent de transformer et de formater les données directement dans vos templates HTML, ce qui facilite la manipulation des données affichées à l’utilisateur.
Pour créer vos propres filtres Jinja dans une application Flask, vous devez d’abord importer le module Markup
depuis le paquet jinja2
. Ensuite, vous pouvez définir vos filtres personnalisés en utilisant la méthode app.template_filter()
de votre instance Flask. Voici un exemple de création d’un filtre Jinja personnalisé dans une application Flask :

pythonfrom flask import Flask
from jinja2 import Markup
app = Flask(__name__)
# Définition d'un filtre Jinja personnalisé pour convertir le texte en majuscules
def to_uppercase(s):
return s.upper()
# Enregistrer le filtre Jinja personnalisé avec l'application Flask
app.jinja_env.filters['uppercase'] = to_uppercase
@app.route('/')
def index():
# Exemple d'utilisation du filtre dans un modèle HTML
texte = "Ceci est un exemple de texte converti en majuscules."
return render_template('index.html', texte=texte)
if __name__ == '__main__':
app.run(debug=True)
Dans cet exemple, nous avons créé un filtre Jinja personnalisé appelé to_uppercase
, qui convertit une chaîne de caractères en majuscules. Ensuite, nous l’avons enregistré avec notre instance Flask en utilisant app.jinja_env.filters
. Une fois le filtre enregistré, nous pouvons l’utiliser dans nos modèles HTML en l’appelant avec le nom que nous avons spécifié lors de l’enregistrement du filtre, dans ce cas, uppercase
.
Voici à quoi ressemblerait le modèle HTML (index.html
) utilisant ce filtre :
htmlhtml>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemple de filtre Jinjatitle>
head>
<body>
<p>{{ texte | uppercase }}p>
body>
html>
Lorsque vous exécutez votre application Flask et accédez à la route principale, le texte sera converti en majuscules grâce à notre filtre Jinja personnalisé avant d’être affiché dans le navigateur.
Vous pouvez créer une variété de filtres personnalisés pour répondre à vos besoins spécifiques dans vos applications Flask. Ces filtres peuvent effectuer des opérations telles que la manipulation de chaînes, le formatage de dates, le tri de listes, ou toute autre opération de transformation de données que vous pouvez imaginer. La création de filtres personnalisés Jinja vous permet de rendre vos modèles HTML plus dynamiques et plus puissants, offrant ainsi une expérience utilisateur plus riche et plus flexible.
Plus de connaissances
Bien sûr, explorons davantage les filtres personnalisés Jinja dans le contexte des applications Flask.
Lorsque vous développez une application Flask, il peut être utile de créer des filtres Jinja personnalisés pour effectuer des transformations spécifiques sur les données affichées dans vos templates HTML. Ces filtres vous permettent de manipuler les données directement dans les templates, ce qui simplifie souvent le processus de présentation des informations à l’utilisateur.
Voici quelques exemples supplémentaires de filtres Jinja personnalisés que vous pourriez créer dans votre application Flask :
Filtrer les dates
Vous pouvez créer un filtre qui formate les objets de date et d’heure selon un format spécifique. Par exemple, vous pourriez convertir une date au format ISO en une représentation plus conviviale pour l’utilisateur, comme « 25 janvier 2024 ».
pythonfrom datetime import datetime
def format_date(dt):
return dt.strftime("%d %B %Y")
Filtrer les listes
Vous pouvez créer un filtre pour trier une liste d’objets selon un critère spécifique ou pour filtrer les éléments de la liste en fonction de certaines conditions.
pythondef trier_par_nom(liste_objets):
return sorted(liste_objets, key=lambda x: x.nom)
def filtrer_par_categorie(liste_objets, categorie):
return [objet for objet in liste_objets if objet.categorie == categorie]
Filtrer le texte
Vous pouvez créer des filtres pour formater le texte d’une manière spécifique, comme en convertissant du texte en gras ou en italique, en supprimant les balises HTML, ou en limitant le nombre de caractères affichés.
pythondef en_gras(texte):
return Markup(f"{texte}")
def supprimer_balises_html(texte):
return Markup.escape(texte)
def limiter_caracteres(texte, longueur_max):
if len(texte) <= longueur_max:
return texte
else:
return texte[:longueur_max] + "..."
Filtrer les valeurs numériques
Vous pouvez créer des filtres pour formater les valeurs numériques de manière spécifique, comme en ajoutant des séparateurs de milliers, en arrondissant les nombres décimaux, ou en convertissant les valeurs en pourcentages.
pythondef separateur_milliers(nombre):
return "{:,.0f}".format(nombre)
def arrondir(nombre, decimales=2):
return round(nombre, decimales)
def pourcentage(valeur, total):
return (valeur / total) * 100
Une fois que vous avez défini vos filtres personnalisés dans votre application Flask, vous pouvez les utiliser dans vos modèles HTML de la même manière que dans l’exemple précédent. Assurez-vous simplement d’enregistrer chaque filtre avec votre application en utilisant app.jinja_env.filters
pour qu’ils soient disponibles dans tous vos templates.
En conclusion, les filtres Jinja personnalisés offrent une flexibilité considérable pour manipuler et formater les données affichées dans vos applications Flask. En les utilisant de manière créative, vous pouvez rendre vos templates HTML plus dynamiques et offrir une meilleure expérience utilisateur à vos utilisateurs finaux.