- 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 utiliser les boucles à l'intérieur du langage de gabarit de Django.Donc ici, j'ai récupéré tous les articles de blog de ma base de données avec blogpost.objects.all
00:00:12 :et je passe ça dans la variable post dans mon contexte.Donc ici, je vais vouloir afficher le titre de tous les articles de blog.Pour ça, on utilise la collade, le pourcentage pour signifier qu'on va utiliser un gabaritet on utilise tout simplement la boucle for.
00:00:27 :Donc comme en Python, on dit for, on dit pourquoi, donc on dit sur quoi on veut boucler.On va ensuite spécifier le nom de la variable, donc on va dire par exemple pour blogpostet on utilise in, donc exactement comme en Python, pour dire sur quel itérable on souhaite boucler.
00:00:40 :Donc for blogpost in post.On ferme notre balise ici et ensuite, on va pouvoir indiquer des choses.Donc là, je pourrais faire un h1 et on va utiliser les doubles à collades pour afficher blogpost.title.
00:00:52 :Donc là, à l'intérieur de notre boucle, on va avoir accès à cette variable blogpostet on peut donc l'afficher avec les doubles à collades.Donc il faut bien penser à mettre ces à collades.
00:01:02 :Là, c'est comme avec les variables en général.Il ne faut pas penser que comme vous êtes à l'intérieur d'une balise comme ceci,vous n'avez pas besoin de mettre ces à collades.
00:01:10 :Vu qu'on a du code HTML, donc ici des tags HTML, il faut bien que Django puisse savoirque ici, ce n'est pas du texte mais que c'est bien une variable qu'il va falloir remplacer.
00:01:20 :Donc n'oubliez pas les à collades.Et on va spécifier là encore qu'on va fermer notre balise.Donc c'est comme avec le if, avec les structures conditionnelles.
00:01:29 :Django ne peut pas savoir avec l'indentation que ce bloc appartient à la boucle for.Je ne suis là encore pas obligé de mettre d'indentation.Je pourrais très bien laisser ça à ce niveau ici et ça ne poserait aucun problème.
00:01:39 :Donc pour spécifier qu'on veut terminer notre boucle for, il faut l'indiquer avec là encore une balise.Et cette fois-ci, ça va être end for.Tout attaché également et on ferme notre balise.
00:01:49 :Donc là, j'ai fait une boucle très simple pour bloc post in post.Donc post ici, c'est la variable que l'on a envoyée ici dans notre contexte.
00:01:56 :On récupère donc une variable bloc post et cette variable bloc post,donc dans ce cas-ci, c'est un objet qui est créé à partir de mon modèle ici.
00:02:04 :Donc je peux accéder à ses attributs et donc je vais afficher tout simplement le titre de mon bloc post.Et je ferme ma boucle ici.
00:02:10 :Si je reviens sur ma page que j'actualise, là j'ai bien le nom des cinq articles.Maintenant, j'ai pas mal de choses que je peux faire à l'intérieur de cette bouclequi peuvent être intéressants comme par exemple afficher le numéro de l'article.
00:02:21 :Alors là, j'aimerais bien ne pas afficher le primary key de l'articlepuisque le primary key des bloc post n'est pas forcément cohérent.Donc je vais vous montrer ce que je veux dire par là.
00:02:29 :Si je veux afficher donc ici le primary key, je peux faire une autre variableet mettre bloc post .pk et on va mettre un point ici.
00:02:37 :Donc pk ici, c'est un attribut qui permet d'accéder au primary key.Donc c'est la clé primaire dans la base de données.Et si je reviens sur ma page, vous allez voir le problème.
00:02:46 :C'est qu'ici ça commence à 3, 4, 5, 6.Je n'ai même pas de 7 et ensuite j'ai le 8.Donc on ne peut pas se fier sur les clés primaires pour avoir une numérotation qui est logique.
00:02:56 :Nous ici, on aimerait bien avoir juste 1, 2, 3, 4 et 5.Donc ça tombe bien puisque avec le langage de gabarit de Django,on a des variables qui vont être disponibles à l'intérieur des boucles for qui sont très pratiques.
00:03:07 :Donc c'est toutes ces variables ici.On a for loop .counter qui va être l'itération actuelle de la boucleà partir de 1.Donc faire bien attention counter par défaut, ça part de 1.
00:03:16 :Contrairement à Python ou si par exemple on utilise enumerate,on va partir par défaut de 0 pour récupérer l'indice.Si vous souhaitez vraiment partir de 0, il faut utiliser counter 0.
00:03:26 :On a la même chose pour compter dans le sens inverse,donc avec ref counter et ref counter 0.Aussi assez intéressant, vous pouvez récupérer un boulet 1 avec first et lastqui va vous signifier si vous êtes à la première ou à la dernière itération de la boucle.
00:03:39 :Donc là encore ça peut être intéressant si par exemple vous souhaitez afficher quelque choseau début ou à la fin de votre boucle.Donc déjà ce que je vais faire, c'est utiliser le for loop counter.
00:03:47 :Donc plutôt que le pk ici, je vais utiliser cette variable for loop .counterqui est disponible précisément parce qu'on est à l'intérieur d'une boucle for.
00:03:55 :Vous n'y aurez pas accès en dehors de la boucle for et c'est logique.Donc je viens ici, j'actualise et là j'ai bien 1, 2, 3, 4, 5.
00:04:02 :Donc moi j'aimerais bien mettre une ligne pour séparer les articles.Donc je vais mettre un hr ici qui va me faire tout simplement une barre horizontaleet si je reviens ici, vous voyez que j'ai bien une barre après chaque article.
00:04:13 :Sauf qu'on pourrait vouloir une barre uniquement après le dernier article.Dans ce cas-ci, on pourrait faire une structure conditionnelle,donc dire if for loop .last, et bien on met un hr.
00:04:26 :Et là je ferme mon if avec le end if de ma balise ici.Donc si on est à la dernière itération de la boucle, on met un hr.
00:04:34 :Je reviens, j'actualise et là on a bien une barre horizontale,mais uniquement après le dernier article.Alors dans ce cas-ci, vous allez me dire, on aurait très bien pu le mettre en dehors de la boucle.
00:04:42 :C'est vrai, je pourrais très bien faire comme ça et ça reviendrait au même.Si j'actualise, j'ai bien ma barre à la fin, mais c'était juste pour l'exemple.
00:04:49 :Donc pensez bien à ces variables.Moi je les utilise très souvent quand j'ai besoin de faire cette numérotationsans tenir compte du primary key ou de choses comme ça qui ne sont pas forcément linéaires,qui ne commencent pas forcément à 1 et qui ne sont pas forcément continues.
00:05:02 :Puisque là vous voyez qu'on avait par exemple un article avec un primary key de 6et ensuite on avait juste le 8, on n'avait pas le 7.
00:05:08 :Donc ça c'est très pratique pour ce genre d'énumération.Également un mot sur la boucle while, puisque là on a vu la boucle for,et en python on a la boucle while,elle n'est pas disponible dans le langage de gabarit de Django.
00:05:19 :Et là encore c'est assez logique, puisque une boucle while,le gros souci c'est que ça peut être infini.Une boucle for, vu qu'on y terre sur quelque chose qui est fini,on ne peut pas avoir une liste infinie.
00:05:29 :Donc on est assuré qu'à un moment ça va avoir une fin.Et le problème de la boucle while, c'est que si on a une condition qui ne change jamais,on risquerait d'avoir une boucle infinie.
00:05:37 :Et dans un langage de template, vu que le template c'est un fichier html,vous comprenez bien que ça poserait pas mal de problèmessi on pouvait afficher un fichier html qui contient du code,qui est infini, qui ne se finit jamais,on aurait vraiment une page qui plante.
00:05:50 :Donc voilà pourquoi on n'a pas la boucle while.De toute façon je vous dirais qu'on n'en a pas vraiment besoin.Généralement on va afficher des données, comme on le fait ici.
00:05:58 :On va afficher un certain nombre d'articles de blog.Donc on va devoir parcourir un iterable.Par contre la boucle while, elle peut être intéressante à l'intérieur d'une vue.
00:06:07 :Et là bien sûr, comme c'est du Python,vous pouvez bien entendu utiliser une boucle while sans souci.C'est vraiment juste à l'intérieur du langage de Django,dans un fichier html, que vous n'avez pas accès à cette boucle while.
00:06:17 :Donc voilà comment faire une boucle for à l'intérieur du langage de gabarit de Django,avec là encore les balises,et ensuite tout simplement la même syntaxe que Python.
00:06:26 :N'oubliez pas de ne pas mettre les deux points.Donc bien sûr, pensez simple, vous n'avez pas besoin des deux points,vous avez juste besoin de rajouter ça,et bien entendu là encore de fermer votre boucle.
00:06:35 :Mais ne vous inquiétez pas, si vous ne le faites pas,Django va vous le rappeler.Si j'actualise ici, vous voyez qu'on a une erreur,donc template syntax error, c'est assez explicite.
00:06:43 :Il nous indique bien qu'on a une boucle for qui n'est pas terminée.J'en profite puisque ça me fait penser ici,vous avez le empty qui peut être assez intéressant aussi.
00:06:52 :Alors je vais vous le montrer dans la documentation directement,pour ne pas que cette vidéo dure trop longtemps.Cette balise empty, ça permet d'afficher quelque choseau cas où votre itérable ici ne contient rien.
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.