- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette vidéo, on va voir comment recréer la page d'accueil du blog.Pour l'instant, si je me rends sur le blog, j'ai ici mon super site avec tous les articles de blog de ma base de données qui sont affichés avec un extrait de chaque article.
00:00:14 :Dans ma page index, j'ai juste l'accueil du site et le blog.Je vais ensuite me rendre dans le fichier views.py de mon application blog.Et à l'intérieur de ce fichier, pour l'instant, j'utilise les vues basées sur les fonctions.
00:00:28 :On a cette vue blog post ici qui est reliée à l'url blog index.Pour l'instant, on fait juste relier l'url blog à notre vue blog post.
00:00:37 :Dans blog post, on va récupérer à partir de notre modèle blog post toutes les instances qui sont dans notre base de données.Et on retourne ensuite l'index du blog, le fichier html ici qui est dans blog slash index qui se retrouve dans mon projet ici dans les templates.
00:00:51 :Donc on a blog index.Et donc on retourne ce fichier html et on lui passe dans le contexte tous les posts que l'on a récupérés.
00:00:58 :Donc les posts ici qui correspondent à blog post objects.all.Donc ça c'est ce qu'on a actuellement.Si je vais ouvrir le fichier index.html pour vous montrer ce qu'on a dans le fichier d'index de mon blog.
00:01:09 :Donc pour l'instant, vous voyez que j'ai juste ici en fait affiché tous les articles.Donc on étend le fichier blog slash base.html qui contient lui juste mon super site ici.
00:01:20 :Ensuite on a un lien pour ajouter un article et on affiche ensuite tous les articles du blog.Donc là on utilise notre variable post que l'on a passé dans notre vue qui est la vue blog post ici.
00:01:30 :Donc ce qu'on va faire c'est qu'à la place de cette vue, on va créer une vue qui va hériter de ListView.Donc ListView, n'oubliez pas de l'importer.
00:01:38 :Il se trouve dans django.views.generic.Et donc dans ce module, vous allez retrouver toutes les vues que l'on va utiliser.Donc dans ce cas-ci, la vue ListView qui est une classe.
00:01:48 :Et donc on va créer notre propre classe qui va hériter de ListView.Donc on va l'appeler tout simplement blog index view et on va hériter de ListView.
00:01:59 :Et à l'intérieur donc de cette classe, on va déclarer le modèle que l'on souhaite utiliser.Donc on va créer un attribut modèle qui va être égal à blog post.
00:02:07 :Donc là encore, n'oubliez pas d'importer votre modèle blog post qui dans mon cas est contenu dans blog.models.Donc c'est ce modèle ici qui est un modèle qui me permet d'afficher mes articles de blog.
00:02:18 :Et donc en fait ce qu'on va faire, c'est qu'on va dire à cette vue ici que c'est avec ce modèle qu'elle doit travailler.Donc cette ListView ici, on va l'utiliser pour lister les articles de blog.
00:02:28 :Avant d'aller plus loin, je vais utiliser donc cette classe ici dans mon fichier urls.py.Et à la place de ma vue blog post ici, on va donc importer depuis blog.views ici, à la place de blog post,
00:02:40 :on va importer le blog.index.views et on va remplacer notre fonction ici blog post par notre classe blog.index.views.Et on n'oublie pas de mettre AsView ici puisqu'il faut bien créer donc notre instance et ne pas retourner la classe,mais bien l'instance de notre classe ici.
00:02:56 :Donc on retourne ça et si j'actualise ma page, vous allez voir qu'on se retrouve avec une erreurpuisque par défaut en fait il va aller chercher un template bien précis.
00:03:05 :Donc le template qui se trouve dans mon application blog, il va ensuite utiliser le nom du modèle tout en minuscules.Donc le nom du modèle que l'on a mis ici blog post tout en minuscules.
00:03:14 :Et dans le cas d'une vue de liste, donc d'une ListView ici, il va rajouter un tiré du bas et liste.Donc actuellement ce template n'existe pas, donc on pourrait très bien aller créer un fichier blog posttiré du bas list.html et l'utiliser comme template.
00:03:28 :Heureusement on peut également spécifier qu'on veut utiliser un autre template.Donc pour ça on va utiliser templateName.Donc là c'est exactement le même attribut que quand on avait un templateView.
00:03:38 :Donc cette classe ici templateView, on retrouve ce même attribut templateNamequi va nous permettre dans toutes les vues qui vont nous permettre d'afficher des templates,de modifier le template à utiliser.
00:03:49 :Donc dans ce cas-ci je vais mettre le chemin vers le template que je souhaite utiliserqui dans ce cas-ci est blog.html.Donc ici je mets blog.html.
00:03:59 :Si je reviens ici donc sur mon URL et que j'actualise,vous voyez que cette fois-ci on n'a plus de problème.Donc le template est bien reconnu, cependant on ne voit plus nos articles.
00:04:10 :Alors pourquoi ? Et bien tout simplement parce qu'automatiquementcette vue va utiliser un nom bien précis pour notre modèle.Donc si je retourne dans index.html ici, avec notre vue basée sur la fonction
00:04:22 :on avait passé la variable post.Donc si je reviens ici dans ma vue, dans blogPost,on retournait dans le contexte cette variable post dans notre dictionnaire.
00:04:31 :Par défaut avec une listView, on va avoir un objet qui va s'appeler objectList.Et donc cet objectList, qu'est-ce que c'est ?Et bien ça va être en fait toutes les entrées dans la base de données de mon modèle.
00:04:41 :Donc en fait ici quand on fait modèle égale blogPost,c'est un peu comme si on faisait objects.all.Ça revient au même que si on faisait ça.
00:04:49 :Donc si on fait ça, ça ne marchera pas.Si vous faites ça, vous aurez une erreur.Pour vous montrer, on peut en fait considérer que quand on fait modèle égale blogPost,ça va récupérer tous les modèles de notre base de données.
00:04:59 :Et ça va retourner ça dans notre contexte,dans une variable qui va s'appeler objectList.Donc on va pouvoir utiliser cette variable à l'intérieur de notre fichier HTML ici.
00:05:08 :Donc là j'ai mis pour post in objectList.Et si je reviens ici et que j'actualise,vous voyez qu'on retrouve bien tous nos articles.Donc là vous allez vous dire que c'est pas forcément très explicite d'avoir objectList ici.
00:05:19 :On préférerait ce qu'on avait avant.Donc par exemple post qui signifiait article en anglais.Là objectList pour quelqu'un qui arrive dans notre projet c'est assez abstrait.
00:05:26 :Alors heureusement là on a deux façons de modifier ça.La première en fait c'est une façon qui est automatiquement créée par Django.C'est qu'il va faire comme avec le fichier de template.
00:05:36 :Il va nous permettre d'utiliser le nom de notre modèle tout en minuscules.Donc là plutôt que object qui est assez générique,on peut remplacer par blogPost-list.
00:05:44 :Donc blogPost ici puisque mon modèle ici c'est blogPost.Donc là on a des majuscules et Django va automatiquement le convertir en minuscules avec "-list".Donc là si je reviens sur mon blog et que j'actualise,on a toujours nos articles qui sont affichés.
00:05:59 :Et la deuxième façon de faire c'est de spécifier un autre attribut ici dans notre classe.Donc cet attribut c'est contextObjectName.Vous voyez que automatiquement PyCharm le détecte.
00:06:08 :Et donc là on va pouvoir spécifier un nom qu'on souhaite utiliser.Donc par exemple on pourrait mettre article.Et là dans ce cas-ci je vais pouvoir utiliser article à l'intérieur de mon fichier HTMLà la place de blogPostList.
00:06:18 :Donc là je remplace par article.Je reviens ici, j'actualise et j'ai toujours mes articles qui sont affichés.Donc si on voulait avoir exactement la même chose qu'ici,dans lequel on passait post,on pourrait mettre post et retrouver notre template d'origineavec forPost, inPost avec un S ici.
00:06:35 :Donc là je reviens, j'actualise et ça fonctionne toujours.Donc vous voyez que là encore on n'est vraiment pas limité par ces vues basées sur les classes.
00:06:43 :On peut modifier beaucoup de choses, on peut modifier le template,on peut modifier même le nom.On a des mécanismes par défaut qui nous sont proposés.
00:06:50 :Donc on peut rester avec soit le nom du modèle tiré du bas liste, soit object list.Et on peut également donc spécifier quelque chose d'un peu plus explicite ici.
00:06:59 :Dernière chose, actuellement on retourne tous les articles de notre blog.Je vous avais dit ici que ça revenait un peu au même que de faire object.all
00:07:06 :mais on aimerait peut-être pouvoir en fait modifier les articles qui sont retournés.Ici dans notre vue basée sur la fonction,on pourrait très simplement ici à la place de all faire un filteret dire que l'on souhaite afficher uniquement les articles qui ont été publiés.
00:07:20 :Donc en faisant filter published égale true.Heureusement là encore on peut modifier le query set qui nous est retourné.Et donc je vous le donne en mille, qu'est-ce qu'on va utiliser comme attribut ?
00:07:29 :Et bien l'attribut query set.Et qu'est-ce qu'on va spécifier ici ?Et bien tout simplement un query set comme on le ferait ici.Donc on pourrait reprendre ce blog post object filter avec publish qui est égal à true.
00:07:39 :Je le mets ici dans query set.Et là si je reviens et que j'actualise,vous voyez que cette fois-ci on a uniquement les articles qui sont publiés.
00:07:47 :Donc dans ma base de données, si je vais voir ici dans mes articles,on a juste ces deux articles ici qui sont publiés.Un terminal pour Windows et cinq raisons d'apprendre Python.
00:07:55 :Et si je reviens là, j'ai bien uniquement ces deux articles.Et donc là on peut faire ce qu'on veut.On peut utiliser toutes les options de query set.
00:08:00 :Donc dé-exclude, n'importe quoi ici.Et ça va nous permettre de filtrer directement ce qui est retourné dans notre liste view.Donc voilà comment utiliser le liste view pour afficher une liste d'objets.
00:08:11 :Là encore vous vous dites probablement que c'est un peu plus compliqué de faire comme ça.On a quatre lignes de code plutôt que d'en avoir trois ici.
00:08:17 :Mais pensez vraiment à l'orienter objet.Pensez à l'héritage.Imaginez que vous ayez plusieurs vues qui nécessitent de retourner différents objets.Et bien là avec une seule classe,en modifiant uniquement par exemple le query setet le template name directement dans le fichier URL ici.
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.