Rendre un template¶
Produire un email à partir d'un template Jinja avec MailTemplateRenderer.
Un template welcome.txt et un contexte donnent un MailMessage prêt à envoyer.
La page dégrade proprement si le template est absent.
Template
Créez le fichier mail_templates/welcome.txt à la racine du projet :
La première ligne Sujet: devient le sujet du message, le reste devient le corps texte.
Contrôleur
Créez le fichier mvc/controllers/mail_template_controller.py :
# mvc/controllers/mail_template_controller.py
from core.http.request import Request
from core.http.response import Response
from forge_mvc_mail import MailTemplateError, MailTemplateRenderer
from core.mvc.controller.base_controller import BaseController
class MailTemplateController(BaseController):
"""Rendre un email depuis un template Jinja via MailTemplateRenderer."""
@staticmethod
def index(request: Request) -> Response:
context = {}
try:
renderer = MailTemplateRenderer("mail_templates")
message = renderer.render(
"welcome.txt",
{"name": "Alice"},
to="alice@example.test",
)
context["subject"] = message.subject
context["body"] = message.body_text
except MailTemplateError as exc:
context["error"] = str(exc)
return BaseController.render(
"mail_template/index.html", context=context, request=request
)
| Élément | Rôle |
|---|---|
MailTemplateRenderer("mail_templates") |
Charge les templates depuis le dossier mail_templates. |
renderer.render("welcome.txt", {...}, to=...) |
Rend le template avec son contexte et retourne un MailMessage. |
MailTemplateError |
Erreur levée si le template est introuvable ou invalide. |
Vue
Créez le fichier mvc/views/mail_template/index.html :
{% extends "layouts/app.html" %}
{% block content %}
<h1>Rendre un template</h1>
{% if error %}
<p>Template introuvable : {{ error }}</p>
<p>Vérifiez que <code>mail_templates/welcome.txt</code> existe à la racine du projet.</p>
{% else %}
<p>Email rendu depuis le template <code>mail_templates/welcome.txt</code> :</p>
<ul>
<li>Sujet : {{ subject }}</li>
<li>Corps : {{ body }}</li>
</ul>
{% endif %}
{% endblock %}
Route
Dans mvc/routes.py, ajoutez l'import puis la route à l'intérieur du groupe public :
À retenir¶
- Un template d'email est un fichier texte Jinja dans
mail_templates. - La ligne
Sujet:du template fixe le sujet du message. MailTemplateRenderer.renderretourne unMailMessageprêt à envoyer.
Palier suivant¶
Vous faites le bilan du niveau intermédiaire.