C'est LE truc qui va te faire gagner un temps fou. Imagine que tu as 50 pages sur ton site. Elles ont toutes le même menu (navbar) et le même pied de page (footer). Tu ne vas pas copier-coller ce code 50 fois ? Si ? 😱
Non. On utilise l'Héritage. On crée un modèle de base (squelette) et les autres pages viennent remplir les trous.
1. Le template parent (base.html)
Crée un fichier templates/base.html.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>{% block title %}Mon Super Site{% endblock %}</title>
</head>
<body>
<nav>
<a href="/">Accueil</a> | <a href="/contact">Contact</a>
</nav>
<div class="contenu">
<!-- C'est ici que les enfants vont injecter leur contenu -->
{% block content %}{% endblock %}
</div>
<footer>
© 2024 - Apprendre Flask
</footer>
</body>
</html>
Les balises {% block nom_du_bloc %} définissent des zones remplaçables.
2. Le template enfant (accueil.html)
{% extends 'base.html' %}
{% block title %}Accueil - Mon Super Site{% endblock %}
{% block content %}
<h1>Bienvenue sur la home page !</h1>
<p>Regarde, j'ai automatiquement la navbar et le footer !</p>
{% endblock %}
Comment ça marche ?
Quand Flask lit {% extends 'base.html' %}, il charge d'abord base.html.
Ensuite, il remplace les blocs de base.html par ceux définis dans accueil.html.
Si tu ne définis pas un bloc dans l'enfant (ex: title si tu l'oublies), Jinja utilisera le contenu par défaut défini dans le parent.
C'est propre, modulaire et facile à maintenir. 😎