Table des matières
L’objectif est de générer plusieurs lettres personnalisées à partir d’un seul modèle Jinja2 (modele.txt), en utilisant une liste de personnes avec leurs informations respectives.
Structure du projet
projet/
├── modele.txt
├── script.py
└── donnees.csv
modele.txt
Bonjour {{ nom }},
Nous vous remercions pour votre commande du {{ date_commande }}.
Votre numéro de commande est : {{ numero_commande }}.
Cordialement,
L'équipe {{ entreprise }}
donnees.csv
nom,date_commande,numero_commande,entreprise
Alice Dupont,2025-07-06,CMD123456,Linux
Bob Martin,2025-07-05,CMD123457,Gnu
Claire Dubois,2025-07-04,CMD123458, Firefox
script.py
import csv
from jinja2 import Environment, FileSystemLoader
from pathlib import Path
# On initialise l'environnement Jinja2 en précisant où se trouvent les modèles
# Ici, le modèle 'modele.txt' se trouve dans le même dossier que ce script ('.')
env = Environment(loader=FileSystemLoader('.'))
# On charge le fichier modèle Jinja2
template = env.get_template('modele.txt')
# On crée un dossier "lettres" s'il n'existe pas déjà, pour y stocker les lettres générées
Path("lettres").mkdir(exist_ok=True)
# On ouvre le fichier CSV contenant les données des destinataires
with open('donnees.csv', newline='', encoding='utf-8') as csvfile:
# On lit le fichier CSV ligne par ligne en utilisant les noms de colonnes comme clés
reader = csv.DictReader(csvfile)
# On parcourt chaque ligne du fichier (chaque destinataire)
for i, row in enumerate(reader, start=1):
# On utilise les données de la ligne pour remplir le modèle Jinja2
message = template.render(row)
# On construit un nom de fichier à partir du nom de la personne
# Les espaces sont remplacés par des underscores pour éviter les problèmes
nom_fichier = f"lettres/lettre_{row['nom'].replace(' ', '_')}.txt"
# On écrit le contenu généré dans un fichier texte dans le dossier 'lettres'
with open(nom_fichier, 'w', encoding='utf-8') as f:
f.write(message)
# On affiche une confirmation dans la console
print(f"Lettre générée : {nom_fichier}")
Liens
https://jinja.palletsprojects.com/en/stable/
https://blog.stephane-robert.info/docs/developper/programmation/python/jinja/
Métadonnées
Posté le: 01.09.2025
Nombre de mots: 281
Temps de lecture: 2 minutes
Cet article fait partie de la série: Jinja2
Jinja2 Tldr