Première vue HTML¶
Objectif : rendre une page HTML avec BaseController.render(...).
Ce que vous allez apprendre : rendre une vraie page HTML depuis un
template Jinja2 avec BaseController.render(...), et comprendre où Forge
va chercher la vue dans mvc/views/.
Palier 3 de la progression officielle des starters, après Paramètres d'URL.
Ce que ce starter montre¶
- une route
/first-html-view - un contrôleur
FirstHtmlViewController - une vue
mvc/views/first_html_view/index.html - un appel à
BaseController.render(...)
Classes Forge utilisées¶
| Classe | Rôle dans ce starter | Référence |
|---|---|---|
Request |
Reçue par la méthode et transmise à render(...). |
Request |
Response |
Retournée par le contrôleur (produite ici via render). |
Response |
BaseController |
Fournit le helper render(...) qui rend la vue HTML. |
BaseController |
Tester¶
Depuis le projet Forge déjà créé avec ce starter :
Ouvrez :
Code essentiel¶
# mvc/routes.py
from mvc.controllers.first_html_view_controller import FirstHtmlViewController
with router.group("", public=True) as pub:
pub.add("GET", "/first-html-view", FirstHtmlViewController.index, name="first_html_view_index")
Comprendre ce code¶
- Une seule route publique :
GET /first-html-view→FirstHtmlViewController.index. - Le
name="first_html_view_index"permet de référencer cette URL depuis un template ou une redirection sans la coder en dur.
# mvc/controllers/first_html_view_controller.py
from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController
class FirstHtmlViewController(BaseController):
"""Starter pédagogique : rendre une première vue HTML."""
@staticmethod
def index(request: Request) -> Response:
return BaseController.render("first_html_view/index.html", request=request)
Comprendre ce code¶
- Le contrôleur ne construit plus la réponse à la main : il délègue à
BaseController.render(...)la production du HTML. render(...)charge le templatefirst_html_view/index.htmldepuismvc/views/, l'exécute via Jinja2, et retourne uneResponseHTML prête à être renvoyée au navigateur.- Pour transmettre des données au template, on passe un
context={...}àrender(...). Ce starter n'en a pas besoin — la vue est statique. - À comparer avec
Response.text(...): ici, la réponse passe par un fichier.htmlséparé, ce qui rend le contenu éditable sans toucher au contrôleur.
<!-- mvc/views/first_html_view/index.html -->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Première vue HTML — Forge</title>
</head>
<body>
<h1>Première vue HTML</h1>
<p>Cette page est rendue avec <code>BaseController.render(...)</code>.</p>
</body>
</html>
À retenir¶
Response.text(...)retourne du texte directement (paliers 1 et 2).BaseController.render(...)rend une vue HTML.- La vue se trouve dans
mvc/views/. - Le nom du fichier passé à
render(...)est un chemin relatif àmvc/views/, séparateur/.
Après ce starter¶
Passez au palier suivant : Route dynamique.
Vous y apprendrez à lire un paramètre de route avec :