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 [2021/11/15 00:15] – 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: | ||