- 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 personlive_helpToutes les questions
De716
4 janvier 2024 - 04 janvier 2024 à 21:33
checkConversation résolue
1 réponse
template doesn't exist
Salut Thibault, j'ai créé un dossier `templates` dans l'application `blog` et y ai ajouté un fichier `post.html` comme au cours de la formation précédemment. Si je mets ce template dans …
00:00:00 :Actuellement, dans nos URL, on a inclus ici directement des classes et on a juste modifié le titre.Donc on a le titre pour la page d'accueil qui est égal à accueil du site et le titre pour la page d'à propos,donc si je vais sur about, qui est égal à à propos tout simplement.
00:00:16 :Donc là, vous vous dites, c'est bien, dans nos vues ici, on a une classe qui retourne un HTTP response,mais nous, on aimerait bien retourner quelque chose d'un peu plus intéressant, c'est-à-dire un fichier HTML,donc un fichier de template.
00:00:28 :Dans ce cas-ci, dans mon projet ici, j'ai créé dans Website un dossier template qui contient un fichier index.htmlet donc il est directement dans Website ici, il n'est pas dans une application et ça c'est possibleparce que j'ai renseigné ici dans template, dans cette clé de use, le chemin complet vers Website slash template.
00:00:45 :Donc juste petite parenthèse ici pour que vous ne soyez pas surpris.Donc là, j'ai mon template index.html et si je vais voir dans ma vue,
00:00:52 :donc dans ma vue, j'ai utilisé cette fois-ci la fonction render qui, dans une vue basée sur les fonctions,nous permet de retourner un template HTML, donc dans ce cas-ci le template index.html
00:01:02 :et on pourrait également passer des informations au contexte,donc dans un dictionnaire ici, pour par exemple changer le titre de la page.Donc pour ça, on pourrait mettre ici par exemple title et avoir le titre donc ici qui est accueil du siteet on pourrait faire donc la même vue ici mais avec about,
00:01:20 :donc créer une autre fonction qui s'appelle about et plutôt que de retourner ici accueil du site,on retournerait le titre à propos et ensuite à l'intérieur de index.html,
00:01:28 :ici on afficherait le title, donc la variable ici title que l'on passe à notre contexte.Donc ça c'est la façon de faire avec des vues basées sur les fonctions,mais maintenant on va voir qu'on peut faire exactement la même chose, bien entendu, grâce aux classes.
00:01:41 :Donc pour ça, on va utiliser cette fois-ci non pas une vue toute simple mais une template view,donc une vue qui comme son nom l'indique nous permet de gérer les templates.
00:01:49 :Donc pour l'importer, je vais mettre mon curseur ici dans PyCharm,on a la petite ampoule qui va nous permettre de trouver automatiquement où elle se trouve,donc elle est dans django-views-generic et on a template view ici, donc je clique ici pour l'importer,donc vous voyez from django.views.generic, on importe template view.
00:02:05 :Donc ensuite qu'est-ce qu'on va faire, alors je vais juste enlever cet import ici puisque j'en n'en ai plus besoin,on va enlever notre get puisqu'on n'en a plus besoin, on va à la place spécifier un nom de template.
00:02:16 :Donc pour ça on va mettre template name ici et on va dire à quoi il est égal,donc dans ce cas-ci on va dire index.html, tout simplement.
00:02:24 :Donc là on renseigne quel template on veut utiliser dans notre template view.Et je vais enlever cet attribut title puisque je n'en ai plus besoin,donc je reviens ici après dans mon fichier urls.py et on va utiliser de nouveau notre vue ici,
00:02:37 :donc notre classe, donc dans urls.py, j'ai ma classe ici, je n'ai plus besoin du title,je vais l'enlever également pour cette vue about.Donc là j'ai bien ma vue home view, as view, donc qui va me retourner ma page d'accueilet si je vais voir dans ma vue ici j'utilise le template index.html.
00:02:55 :Donc si je me rends ici sur ma page d'accueil et que j'actualise,vous voyez que j'ai bien mon template qui s'affiche donc avec accueil du site icipuisque dans index.html ici j'ai tout simplement un h1 avec marqué accueil du site.
00:03:07 :Donc ça fonctionne bien, vous voyez qu'on a réussi grâce à cette classe icidonc dont on fait hériter notre vue à aller chercher un fichier de template.
00:03:15 :Donc là encore il n'y a pas de secret, il faut aller voir dans la documentation.Si vous allez dans la documentation de Django, donc Django documentation,on va aller voir le template view, donc template view ici dans la barre de recherche.
00:03:27 :Vous pouvez bien entendu changer la langue, donc là je vais aller dans base viewet je vais tout de suite en bas ici mettre mon curseur sur language,vous voyez que pour l'instant on est en anglais, je vais me mettre en françaiset on va aller voir l'aide de la template view.
00:03:40 :Donc je clique sur template view ici et vous allez voir qu'on a un attribut qui est disponible,notamment donc le template name ici que l'on a modifié pour utiliser,donc dans ce cas-ci index.html.
00:03:50 :Donc là comme je vous dis, vraiment il faut de la pratique,il faut aller lire la documentation pour savoir ce que vous pouvez utiliserou alors regarder des tutoriels sur docstring, c'est également une autre façon de faire,mais je vous conseille vraiment de regarder la documentationpuisqu'il y a vraiment beaucoup de choses qui sont indiquées dedans
00:04:06 :et vous ne pouvez pas tout deviner.C'est vraiment un peu la différence, une fois qu'on a habitué aux vues avec les fonctions,qu'on a compris que render ça nous permettait de retourner un template,alors là vous allez me dire qu'il faut aussi savoir qu'on a besoin d'une fonction render,
00:04:18 :c'est vrai, mais en fait vous allez voir que dans les classes,il y a beaucoup beaucoup de choses comme ça, beaucoup de noms qu'il faut connaître,alors que dans les vues basées sur les fonctions,à part le return de render effectivement qu'on a besoin de connaître,toute la logique finalement ne nécessite pas beaucoup de connaissances
00:04:32 :au niveau du nom, des attributs ou des fonctions.Donc là ici j'ai bien l'accueil du site qui est affichégrâce à ce fichier de template HTML.
00:04:40 :Et donc maintenant on aimerait bien utiliser ce même templatepour ma vue about ici, sauf que pour l'instant si je me rends sur ma vue about,je vais avoir exactement le même template qui est retourné.
00:04:50 :Donc là je vais sur about, j'ai toujours marqué accueil du site.Donc là on aimerait bien modifier le contexte.Donc modifier le contexte pour pouvoir passer ici comme on l'avait faitavec les vues basées sur les fonctions,tout simplement une variable title qui serait différenteen fonction de ce que l'on passe dans notre classe.
00:05:05 :Donc là ici ce qu'on va faire c'est qu'on va utiliser une autre méthode,une méthode qui s'appelle getContextDataqui va nous permettre d'accéder au contexte.
00:05:13 :Donc là je suis allé un petit peu vite, je vais le refairepuisque vous voyez qu'avec PyCharm on a l'autocomplétion.Donc getContextData, on a le self puisque bien sûr là on va manipuler des instanceset on rajoute les quarks puisqu'il peut y avoir potentiellement dans ce contextedifférents arguments qui sont envoyés à cette méthode.
00:05:31 :Donc il faut être capable de les récupérer.Donc on met les quarks ici et ensuite ici je vais récupérer le contexte.Donc on va dire que dans contexte, on récupère le contexte qui est passéavec cette méthode.
00:05:42 :Donc on va utiliser super pour appeler la méthode getContextData.Donc getContextData, je la copie et je la colle iciet on va lui repasser les quarks.
00:05:52 :Donc ça, ça va nous permettre d'appeler cette méthode,d'appeler la méthode parent, donc la méthode qui est dans TemplateView,d'aller récupérer le contexte et on va pouvoir ensuite modifier le contexte.
00:06:01 :Si jamais vous souhaitez aller voir également le code de cette TemplateView,n'hésitez pas à faire donc sur macOS c'est Command-B,sinon vous pouvez faire un clic droit sur TemplateView ici,aller dans GoTo, donc le menu ici GoTo,et vous allez trouver le raccourci pour votre système d'exploitationet donc on va aller dans Déclaration or Usage.
00:06:19 :Donc moi ici c'est Command-B,donc je crois que sur Windows ça doit être Control-B tout simplement.Donc on va cliquer ici sur Déclaration or Usageet ça va nous ramener ici.
00:06:29 :Et là ici vous voyez qu'on a le ContextMixin,donc on va refaire la même chose, c'est le ContextMixin en faitqui nous permet d'accéder à cette méthode.
00:06:36 :Donc on va refaire un clic droit, GoTo, Declaration or Usage,là ça nous amène au ContextMixin et dans ce ContextMixinvous voyez qu'on a donc cette fameuse méthode GetContextData.
00:06:46 :On a les quarks ici qui vont nous permettre de récupérer la vueet ensuite on va ajouter différentes choses,on va updater notre dictionnaire ici, le quarks, et le retourner.
00:06:55 :Et donc si je viens dans ma vue,ce qu'on fait c'est tout simplement appeler avec Super cette méthode iciet on va tout simplement la modifier.
00:07:03 :Donc là on récupère notre contexte et on va modifier,donc Context c'est un dictionnaire, donc on fait Contextet on va ajouter une clé dans ce dictionnaire,donc on va l'appeler Title et on va dire qu'elle est égaletout simplement à Accueil du site pour l'instant.
00:07:18 :Donc on met juste ça pour l'instant, on la modifiera par la suiteet je retourne le contexte.Donc là ça va me permettre d'utiliser cette variable Title,donc là c'est exactement la même chose que ce qu'on a ici.
00:07:27 :Ici on a un dictionnaire avec une clé Titlequi est égale à Accueil du site et là c'est exactement ce qu'on fait.On modifie notre contexte après l'avoir récupéré à cette ligne iciet on lui assigne donc la valeur, donc la chaîne de caractère Accueil du site.
00:07:40 :Et donc dans notre index ici on affiche ce Title.Donc là pour l'instant si je reviens sur ma page About,on a toujours Accueil du site qui est affiché,pareil sur la page d'accueil,et maintenant je vais pouvoir modifier en fait cette chaîne de caractèregrâce à un attribut, donc je vais remettre un attribut Title ici
00:07:56 :qui va être égal à Default,comme ça, donc une chaîne de caractère qui s'appelle Défaut,comme ça on a une valeur par défaut,et ici je vais donc à la place de Accueil du site mettre Self.Title.
00:08:06 :Donc on va utiliser l'attribut Title de notre instancequand on va retourner cette vue.Donc quand on va retourner notre vue ici avec As View,on va avoir une instance et ici on va donc passerà Title, Accueil du site,et on va faire pareil avec Home View, As View ici pour le About,
00:08:23 :donc Title égale About.Donc on va mettre A propos, on va rester en français,A propos comme ceci,et donc là on envoie ce Title ici à notre attribut,donc l'attribut qui dans ce cas-ci va être un attribut d'instance,puisque quand on fait un As View ici,on va travailler avec des instances et non plus avec la classe,
00:08:41 :donc on va avoir deux instances ici,avec un attribut Title qui sera différent à chaque fois.Et quand on va récupérer le contexte,ici vous voyez qu'on fait bien Self.Title,
00:08:50 :donc ce qui va nous permettre de récupérer l'attribut de l'instance,donc dans le cas de ma vue ici,donc de la vue de la page d'accueil, on aura Accueil du site,et dans le cas de About, on aura A propos.
00:08:59 :Et ensuite on va donc modifier en conséquence notre fichier HTML.Donc là si je reviens sur mon accueil et que j'actualise,j'ai bien Accueil du site, et si je reviens sur About,j'ai bien A propos qui est affiché.
00:09:11 :Donc vous voyez, là encore, ça peut être assez compliqué,ça peut paraître assez compliqué au début,là je suis vraiment allé assez loin dans les explications,je vous ai montré jusque dans le code de Django,là vous voyez qu'on est directement dans mon environnement virtuel,si j'élargis un petit peu ici,
00:09:26 :vous voyez qu'on est dans le .env, lib, python 3.9,site package, etc.Donc on est vraiment allé dans le fichier base.py,qui contient ces mixings, qui contient ces views,ça peut être assez instructif,je vous conseille d'ailleurs d'aller voir un peu ce code là,pour un peu mieux comprendre ce qui se passe.
00:09:41 :Mais vous voyez que là en fait c'est vraiment de l'orienté objet,mais de toute façon ne vous en faites pas,il ne faut pas avoir peur de tout ça,la plupart du temps, une fois que vous connaissez ces méthodes,vous savez que quand vous allez devoir modifier le contexte,
00:09:52 :il suffit de créer une méthode getContextData,récupérer le contexte, le modifier, le retourner, et c'est tout.Donc finalement c'est assez similaire à ce qu'on avait ici,où là tout simplement on passe un dictionnaire à notre contexte,là à la place on passe par une méthode,puisque là encore on est avec de l'orienté objet.
00:10:07 :Donc le gros avantage c'est qu'on peut avoir cette même classe ici,qui est utilisée là encore pour différentes choses.Donc voilà pour cette template view,vous commencez à voir qu'on va utiliser beaucoup de méthodes comme celle-ci,qui vont nous permettre de faire différentes opérations,donc de modifier par exemple le contexte dans ce cas-ci,
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.