- 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
Gabriel Trouvé
9 février 2023 - 09 février 2023 à 18:13
checkConversation résolue
2 réponses
Le décorateur property dans Django
Re,On créer un modèle, avec une méthode décorée d'un @property.Cette méthode est utilisé dans le HTML.Dans ce cas, pk utiliser un property ?Que je mette le property ou non j'ai …
00:00:00 :On va créer la page d'accueil du blog puisque pour l'instant on a la page par défaut de Djangoqui est affichée. Nous ce qu'on va vouloir faire c'est à la place afficher les articles que l'on a
00:00:11 :créé dans notre interface d'administration. J'ai créé plusieurs articles ici, dans articles j'enai créé trois donc je vous invite à créer des articles de test également de votre côté pourqu'on puisse les afficher ici. Pour afficher tous ces articles et également par la suite pour les
00:00:26 :créer, les modifier, les supprimer on va passer par des vues fondées sur les classes donc ce qu'onappelle les classes based view cbv en anglais. On va utiliser ces classes pour afficher les
00:00:37 :différents éléments de notre base de données donc dans ce cas ci nos articles de blog. Ce que jevais faire c'est que je vais ajouter ces classes dans le fichier views.py qui est à l'intérieur de
00:00:46 :mon application. On a nos vues donc views.py et pour l'instant il n'y a rien à l'intérieur. Ce queje vais faire c'est créer une classe ici qui va nous permettre de récupérer très facilement tousles articles de notre blog. Donc on va importer depuis django.views.generic la listview qui est
00:01:04 :une vue qui nous permet de récupérer toutes les données de notre modèle. On va également doncimporter notre modèle depuis post.model donc import blog post et on va créer une classe que
00:01:14 :je vais appeler blog home tout simplement et qui va hériter de listview. A l'intérieur de cetteclasse on va spécifier que l'on veut utiliser notre modèle blog post donc dans l'attributmodèle donc ça ça va nous permettre de récupérer automatiquement tous les articles du blog quel'on a créé dans l'interface d'administration. On va également rajouter un autre attribut qui
00:01:34 :s'appelle context object name ça va tout simplement nous permettre de spécifier un nom pour lavariable que l'on va utiliser à l'intérieur du fichier de template puisque par défaut en faitles variables qui vont être disponibles ça va être object list ou alors le nom du modèle touten minuscule donc dans ce cas ci blog post tiré du bas list. Dans mon cas je préfère avoir quelque
00:01:53 :chose d'un peu plus explicite donc dans ce cas ci je spécifie le nom que je souhaite pour mavariable dans l'attribut context object name donc on y reviendra quand on sera à l'intérieur dufichier html. Donc ensuite on va créer un fichier url pour notre application donc pour notre
00:02:08 :application de post ici ce n'est pas obligatoire on pourrait créer les url directement dans cefichier url.py mais c'est une bonne pratique généralement de séparer les différents fichiers
00:02:17 :d'url donc dans ce cas ci je vais créer un fichier url dans ce dossier post puisqu'il n'existe paspour l'instant donc je vais faire un clic droit et je vais créer un nouveau fichier que je vaisappeler urls.py tout simplement et à l'intérieur de ce fichier on va donc créer le chemin d'url
00:02:33 :qui va être relié à notre vue donc je vais déjà importer la fonction path qui va me permettre decréer des chemins d'url donc from django.urls import path et on va importer également notre
00:02:44 :vue donc from post.views import blog home donc la vue que l'on vient de créer. On va ensuite définirici un espace de nom donc ça on y reviendra aussi par la suite c'est tout simplement une chaîne decaractère qui va nous permettre de préciser le nom des url donc dans ce cas ci on va l'appeler
00:03:00 :post donc on va dire app name égale post donc on va mettre le même nom que notre application onreviendra comme je vous dis par la suite. On va ensuite créer une variable url patterns qui est
00:03:10 :donc une liste et qui va contenir pour l'instant un seul chemin donc on utilise la fonction pathle chemin ça va être la vue d'accueil donc on va mettre tout simplement une chaîne de caractèrevide on va créer notre blog home as view donc on va le retourner en tant que vue et on va donner
00:03:26 :un nom à cette url donc on va dire name égale home tout simplement. Donc ça ça me permet quandje vais accéder à cette url de retourner la classe donc la classe blog home en tant que vue. Pour
00:03:36 :l'instant nos url elles ne sont pas intégrées dans notre application on a créé notre fichier icimais avec Django il faut savoir qu'il y a un seul point d'entrée qui est utilisé pour résoudre lesurl donc ce point d'entrée il est défini dans le fichier settings.py dans une variable qui s'appelle
00:03:51 :root-urlconf et vous voyez ici que ça pointe vers blog.urls donc ce fichier ici blog urls.pydonc ce qu'il va falloir faire c'est inclure mon fichier d'url que je viens de créer qui est danspost à l'intérieur de ce fichier d'url donc je vais juste enlever tous les commentaires qui
00:04:07 :est ici puisqu'on n'en a pas besoin et pour l'instant donc on a juste l'url d'admin quinous permet d'accéder à l'interface d'administration et donc dans mon cas ce que je vais faire c'estque je vais inclure grâce à la fonction include l'autre chemin d'url donc je vais faire ici un
00:04:20 :autre chemin et ce chemin il va commencer à blog donc quand on va se rendre sur notre site àl'adresse blog on va accéder à la vue d'accueil donc la page d'accueil de notre blog donc cequ'on fait ici c'est qu'on fait un include de la chaîne de caractère post.urls tout simplement
00:04:37 :donc ça en fait ce que ça va faire que ça va inclure notre fichier d'url ici et ça va concaténerles deux donc je vais juste les organiser un petit peu mieux je vais fermer tout ça donc on a notrepremier fichier qui est le point d'entrée ici donc blog urls.py et quand on va se rendre à
00:04:52 :l'adresse blog slash il va concaténer blog slash avec toutes les urls qu'on a ici donc dans ce casci on n'a rien on a une chaîne de caractère qui est vide donc dans ce cas ci ça veut dire qu'onva pouvoir accéder à notre vue qui est ici blog home as view directement en se rendant à cette
00:05:06 :adresse donc dans mon site je valide à slash blog slash je ne mets rien après je valide avec entréeet là on a une belle erreur puisque le template qu'il va chercher par défaut n'existe pas doncil va falloir le créer et pour ça on va donc le créer directement à l'intérieur de notre
00:05:22 :application donc dans le dossier post ici je vais créer un dossier donc je fais clic droit newdirectory on va créer un dossier qui s'appelle templates donc là c'est bien important qu'ils'appelle comme ceci templates et on va créer un sous dossier post à l'intérieur de ce dossiertemplates donc ça je peux le faire directement en mettant un slash et en mettant post et ça va
00:05:40 :automatiquement créer les deux dossiers donc on a bien templates et post qui ont été créés je vaisensuite créer la vue qu'il s'attend à trouver donc le fichier html ici donc avec une vue de type listview par défaut il va chercher un template qui commence donc par le nom de mon application donc
00:05:55 :dans ce cas ci post donc ça c'est bon on a déjà le dossier qui correspond à ce dossier ici et onva créer donc un fichier html à l'intérieur de ce dossier qui s'appelle blog post tiré du baslist.html et comme ça automatiquement il va aller chercher ce fichier pour afficher notre vue donc
00:06:11 :si je reviens dans views ici il faut savoir qu'on peut modifier ce template si on le souhaite enutilisant l'attribut template name donc on le fera pour certaines vues pour l'instant on va justegarder ce nom par défaut puisqu'on a créé notre fichier ici et c'est donc à l'intérieur de ce
00:06:24 :fichier qu'on va afficher nos articles de blog donc ce que je vais faire ici c'est étendre monfichier de base donc le fichier de base de html qu'on a créé dans les parties précédentes cefichier ici on va l'étendre et rajouter à l'intérieur de ce fichier html nos articles
00:06:38 :donc comme il y a pas mal de code html je vais pas tout taper devant vous ça sera un peu longje vais juste coller le résultat et je vais vous expliquer tout ce qu'on fait ici donc déjà onutilise la balise extend et on met le nom du fichier html donc ça c'est le nom du fichier qui est à
00:06:53 :l'intérieur de templates donc on met directement le nom du fichier puisqu'on a rajouté ce dossierdans les settings donc on va pouvoir ajouter directement un template et l'étendre en mettantson nom avec la balise extend donc on va étendre ce fichier html et on va insérer des éléments à
00:07:07 :l'intérieur des différents blocs que l'on a défini dans notre fichier base.html donc là on a lebloc title on va le remplacer par accueil du blog donc ça c'est le bloc que l'on avait dans notrebase ici on avait déjà mis accueil du blog on pourrait l'enlever comme je vous avais dit et
00:07:20 :on va donc juste étendre donc remplacer en fait ce qu'on a à l'intérieur de ces balises avec cequ'on a mis à l'intérieur de ce bloc ici et on va faire pareil pour le contenu donc là on a misun autre bloc content donc ça veut dire que tout ce qu'on a ici tout ce qu'on a à l'intérieur de
00:07:33 :ce bloc de contenu ça va être inséré automatiquement à la place de ce bloc ici dans le fichier de htmlque l'on étend donc j'espère que c'est assez clair sinon repassez vous cette partie c'est un peucompliqué au début quand on étend des fichiers html mais vous allez voir qu'en fait c'est quand
00:07:46 :même assez simple une fois qu'on a compris le mécanisme donc là qu'est ce que je vais rajouterà l'intérieur de ce fichier je vais tout simplement mettre un h1 qui est donc un titre qui va indiquerqu'on est sur le bloc de docstring et ensuite je vais utiliser donc cette variable post qui est la
00:08:00 :variable que l'on a définie dans notre vue donc si vous vous souvenez bien on avait défini icicontext object name ce qui nous permet donc d'utiliser ce nom pour récupérer tous lesblogs donc tous les articles de notre blog post donc là avec la list view par défaut ça va récupérer
00:08:13 :toutes les entrées de notre base de données donc là on va afficher tous les articles que l'on acréé dans l'interface d'administration donc ici je fais une boucle 4 je dis pour post dans post eton va créer un tag article on va afficher dans un h2 le titre du post on va également afficher par
00:08:29 :qui il a été publié donc là je mets publié par et on va aller chercher le nom d'utilisateur del'auteur qui est relié au post donc là on va chercher l'auteur donc la clé étrangère quiest relié à ce post et sur cet auteur on a un nom d'utilisateur que l'on va aller chercher on
00:08:43 :a ensuite le created on et created on on va lui assigner le filtre date avec ici la chaîne decaractère j f y donc si vous souhaitez aller voir comment utiliser ce filtre vous pouvez vousrendre dans la documentation de django donc vous tapez sur votre moteur de recherche favori
00:08:59 :documentation django vous allez dans la documentation de django vous cherchez les filtres et vous avezici les balises et filtres de gabarit intégrés et si on descend un petit peu ici on va voir lefiltre date et vous allez avoir ici toutes les indications sur comment formater vos dates donc
00:09:14 :dans mon cas ici je mets j minuscule f majuscule y majuscule donc ça veut dire qu'on va récupérerça donc ici le j minuscule c'est le jour du mois sans zéro et ensuite f c'est le nom du mois aucomplet et y c'est l'année avec quatre chiffres ici donc si vous souhaitez afficher autre chose
00:09:30 :vous pouvez aller voir dans la documentation directement ensuite on a deux autres chosesici deux autres filtres que l'on utilise c'est le filtre safe qui va nous permettre d'interpréterles balises html qui seraient à l'intérieur du contenu de notre article donc si par exemple on ades balises qui spécifie des paragraphes ou des sauts de lignes ou des choses du genre et bien
00:09:47 :on va les interpréter si on ne met pas le safe ici elles vont être incluses directement sousforme de texte dans notre article donc si on a par exemple un h1 pour spécifier un titre ilserait marqué directement on aurait h1 et le titre nous ce qu'on souhaite ici c'est que si on a un
00:10:00 :tag h1 et bien il soit compris par notre fichier html comme un tag de titre et qu'il soit interprétédonc pour ça on met safe et ensuite on va mettre truncate words donc truncate words ça va nouspermettre de tronquer le contenu de l'article puisque ici on a la vue principale de notre
00:10:16 :article et on ne souhaite afficher que les 50 premiers mots puisqu'on ne veut pas afficher lecontenu en entier de l'article sur la page d'accueil donc voilà tout ce qu'on fait ici ily a pas mal de petites choses on pourrait rajouter des choses les modifier et quelque chose ici que
00:10:28 :je vais vouloir modifier c'est le nom de l'auteur puisque ici en fait on va chercher le usernamed'auteur mais vous allez voir que des fois il se peut en fait qu'on a un article qui n'est pasd'auteur donc ce que je vais faire c'est que je vais déjà actualiser la page pour vous montrer
00:10:40 :ce qu'on a actuellement alors là vous voyez que le template n'est toujours pas trouvé donc çac'est assez courant en fait quand vous rajoutez des fichiers de template comme ceci quand vousmodifiez vous rajoutez des variables ou des fichiers template il est très courant de devoiren fait arrêter votre serveur et le relancer donc là j'ai fait ctrl c dans mon terminal pour arrêter
00:10:57 :le serveur et je vais faire python manage.perek run server pour relancer le serveur et cettefois ci si je me rends de nouveau sur cette page et que j'actualise là j'ai bien ma page quis'affiche donc on retrouve tout ce qu'on a sur notre fichier html on a bien le h1 avec le bloc
00:11:12 :de docstring et ensuite on a tous les articles donc python c'est super publié le 31 mars 2021et on a bien les 50 premiers mots qui sont affichés et le truncate words automatiquement va rajouterdes points de suspension après avoir coupé donc notre extrait ici vous voyez donc ce que je vous
00:11:27 :disais le problème c'est qu'ici on a marqué publié par et comme dans ce cas ci donc dans le cas decet article on n'a pas d'auteur qui est assigné à cet article et bien on n'a pas de nom ici on amarqué publié par et ensuite on a la date pour les autres par contre on a bien marqué publié
00:11:40 :par tbache puisque c'est bien le nom d'utilisateur que j'ai associé à ces articles donc ce qu'on vapouvoir faire ici c'est plutôt que d'entrer directement le username de author c'est rajouterdans notre modèle donc si je me rends ici dans le fichier models.py une propriété qui va nous
00:11:55 :permettre de retourner une valeur par défaut si jamais on n'a pas d'auteur donc ce que je vaisfaire c'est que je vais créer ici une méthode qui veut s'appeler author or default et cette méthodeon va vérifier donc on va faire if self.author donc si on a un auteur qui est associé à cet
00:12:09 :article on va retourner self.author.username si ce n'est pas le cas on va retourner tout simplementune chaîne de caractère par exemple on pourrait dire l'auteur inconnu et tout ça on pourrait lesimplifier avec un opérateur ternaire donc c'est à dire qu'on va retourner ici on va prendre leif accrochez vous bien si vous n'êtes pas familier avec les opérateurs ternaires et on va faire ça
00:12:29 :donc else l'auteur inconnu donc on retourne self.author.username si on a un auteur sinonon retourne la chaîne de caractère l'auteur inconnu et tout ça on va le définir en tantque propriété donc on va mettre le décorateur at property et comme ça je vais pouvoir utiliserdonc cette propriété à l'intérieur de mon fichier html à la place de post.author.username donc
00:12:52 :ici je vais mettre post.author or default donc ça va aller exécuter cette méthode ici donc cettepropriété et retourner soit le nom d'utilisateur s'il y en a un donc s'il y a un auteur associésinon la chaîne de caractère l'auteur inconnu. Donc si je reviens ici et que je recharge la page
00:13:06 :vous voyez que cette fois ci on a bien marqué publié par l'auteur inconnu puisque dans ce casci on n'a pas d'utilisateur et sinon c'est marqué type h donc le nom d'utilisateur associé àl'auteur. Donc voilà pour cette partie vous voyez que ça fait pas mal de petites choses mais on
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.