Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| public:appro-s7:td_web:heritage-templates [2023/11/03 15:34] – edauce | public:appro-s7:td_web:heritage-templates [2023/11/04 18:07] (Version actuelle) – edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ==== 14. Héritage de template ==== | ||
| + | |||
| + | Django vous réserve encore bien des surprises : une assez géniale est l' | ||
| + | |||
| + | Les modèles permettent d' | ||
| + | Créer un template de base | ||
| + | |||
| + | Un template de base est le template le plus simple que vous pouvez faire hériter à chaque page de votre site web. | ||
| + | |||
| + | Créons le fichier base.html dans le dossier blog/ | ||
| + | |||
| + | blog | ||
| + | └───templates | ||
| + | └───blog | ||
| + | base.html | ||
| + | post_list.html | ||
| + | |||
| + | Ensuite, ouvrez ce fichier dans l' | ||
| + | |||
| + | '' | ||
| + | <code html> | ||
| + | {% load static %} | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <link rel=" | ||
| + | <link rel=" | ||
| + | <link href='// | ||
| + | <link rel=" | ||
| + | </ | ||
| + | < | ||
| + | <div class=" | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {% for billet in billets %} | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {{ billet.published_date }} | ||
| + | </ | ||
| + | < | ||
| + | <p>{{ billet.text|linebreaksbr }}</ | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Puis, dans le fichier '' | ||
| + | |||
| + | '' | ||
| + | <code html> | ||
| + | < | ||
| + | <div class=" | ||
| + | < | ||
| + | </ | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {% block content %} | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | Vous pouvez remarquer qu'on vient de remplacer tout ce qui était entre {% for billet in billets %} et {% endfor %} avec : | ||
| + | |||
| + | '' | ||
| + | <code html> | ||
| + | {% block content %} | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | |||
| + | Mais pourquoi? Vous venez de créer un block ! Vous avez utilisé la balise de modèle '' | ||
| + | |||
| + | Enregistrez base.html et ouvrez votre '' | ||
| + | |||
| + | '' | ||
| + | <code html> | ||
| + | {% for billet in billets %} | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {{ billet.published_date }} | ||
| + | </ | ||
| + | < | ||
| + | <p>{{ billet.text|linebreaksbr }}</ | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | </ | ||
| + | |||
| + | Nous voulons utiliser ceci dans le cadre de notre modèle pour tous les blocs ' | ||
| + | |||
| + | Vous voulez que votre balise block corresponde à la balise dans votre fichier base.html . Vous voulez aussi qu'il inclue tout le code qui appartient à vos blocs de contenu. Pour faire cela, entourez tout le code de '' | ||
| + | |||
| + | '' | ||
| + | <code html> | ||
| + | {% block content %} | ||
| + | {% for billet in billets %} | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {{ billet.published_date }} | ||
| + | </ | ||
| + | < | ||
| + | <p>{{ billet.text|linebreaksbr }}</ | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | Seule une chose reste à faire. Nous devons connecter ces deux modèles ensemble. C'est ça, étendre des modèles ! Nous allons le faire en ajoutant une balise ' | ||
| + | |||
| + | '' | ||
| + | <code html> | ||
| + | {% extends ' | ||
| + | |||
| + | {% block content %} | ||
| + | {% for billet in billets %} | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | {{ billet.published_date }} | ||
| + | </ | ||
| + | < | ||
| + | <p>{{ billet.text|linebreaksbr }}</ | ||
| + | </ | ||
| + | {% endfor %} | ||
| + | {% endblock %} | ||
| + | </ | ||
| + | |||
| + | Et voilà ! Enregistrez le fichier et vérifiez que votre site fonctionne toujours correctement. :) | ||
| + | |||
| + | Si vous obtenez l' | ||
| + | |||
| + | [[public: | ||