Session du 05 avril 2024 à 19h00
Développement Web & Frameworks
Programmation Orientée Objet (POO)
Initiation à Wagtail (basé sur django)
Introduction à Wagtail sur un projet Django pour un petit blog.
00:00:00 :Ce qu'on va faire, c'est qu'on ne va pas faire un projet Wagtail, on va se faire un projet Django.Et puis, d'un seul coup, je regrette de ne pas avoir Wagtail.
00:00:09 :Mais finalement, on peut installer Wagtail quand même sur un projet Django,puisque Wagtail est basé sur Django.Pour ceux qui ne connaissent pas Wagtail, en fait, c'est un CMS.
00:00:23 :Alors, il ne faut pas voir ça comme un CMS à la WordPress.Ce n'est pas un unicode. En fait, là, c'est vraiment un CMS que vous allez coder.
00:00:31 :Et je trouve ça vachement cool, parce que quand vous savez coder, du coup,vous pouvez faire des trucs de fous avec.Moi, je ne vais pas vraiment encore pousser. Je fais que des choses très basiques avec,
00:00:41 :parce que je suis plus sûr de Django pur.Je pense que le jour où je bosse vraiment en Django,j'en fais mon métier, Wagtail, je vais le pousser.
00:00:50 :Donc voilà, c'est une expérience qui peut être optimisée pour les rédacteurs.Et c'est vachement pratique pour l'édition de pages, d'articles, ce genre de choses.Et ergonomiquement, vous allez voir, c'est vraiment génial.
00:01:03 :Parce que Wagtail possède sa propre interface d'administration qui cohabite avec celle de Django.Voilà, donc on peut faire cohabiter Django et Wagtail.Moi, j'ai un projet, je vais vous le montrer.
00:01:18 :Si jamais il y en a qui perdent la...On ne se donne pas du front parce que je ne suis pas un mec qui fait du front.
00:01:25 :Mais ça, typiquement, c'est un projet que j'ai fait sur ma page perso.Ça marche avec Wagtail et Django en même temps.Donc j'ai mon administration Djangoet j'ai mon administration Wagtail où je peux gérer toutes mes pages.
00:01:43 :Qu'est-ce que j'allais dire ? Sur quoi je voulais parler ?Écoutez, on va pas faire trop de théories, on va passer au code assez vite.
00:01:56 :Il faut juste se dire que ça apporte quand même pas mal de choses.Parce que Wagtail, vous pouvez faire de l'édition, mais c'est assez poussé.
00:02:06 :Par exemple, c'est un système d'arbre.En fait, vous avez une page, et après vous avez une page enfant,et après vous pouvez avoir plusieurs pages enfant.
00:02:16 :Voilà, ça fonctionne comme ça.Donc on va revenir au sujet pour voir un peu comment ça marche.Alors, je parle d'un projet Django tout basique.
00:02:27 :Là, il n'y a rien dedans, quasiment.J'ai une application Account que j'ai faite en avance, j'ai juste fait ça.Pourquoi je fais ça ? Parce qu'il faut prendre l'habitude avec Django
00:02:36 :de se faire un modèle d'utilisateur personnalisé.Parce que si vous partez sur le, je l'avais dit la dernière fois déjà,si vous êtes l'utilisateur de base de Django, il y a un truc dedans.
00:02:49 :Le jour où vous voulez améliorer le...Voilà.Il y a un truc là, je ne sais pas ce qu'il y a de là.Voilà, c'est bon.
00:03:02 :Parce que le jour où vous voulez partir sur un...customiser un peu votre modèle d'utilisateur,ça va être compliqué de refaire un modèle et de repasser sur un nouveau modèle.
00:03:14 :Donc, je vous incite vraiment à vous faire une application Account,un modèle d'utilisateur customisé,et comme ça, si vous voulez acheter des choses, un truc que vous pouvez, mais voilà.
00:03:25 :Est-ce que vous pouvez zoomer un peu, s'il te plaît ?Je zoom encore ?Alors, j'ai peur de ne plus faire grand-chose.Je peux bien zoomer, mais on va essayer à 150.
00:03:36 :Ça va, là, ou pas ?Super, merci.OK, super.Donc, voilà, le modèle d'utilisateur,il faut toujours en faire un custom,même si, moi, il est libre d'abstract user.
00:03:53 :C'est-à-dire que je ne fais pas grand-chose avec, vous voyez, avec très peu de lignes.Donc, voilà.Hop.Tac.J'ai rajouté aussi d'avance un dessus-template,c'est pour avoir un peu le HTML de base.
00:04:07 :Le but, ce n'est pas de faire du front ce soir,mais au moins, comme ça, on aura un template de base.Donc, je suis parti sur les settings de base,le Django, comme vous voyez, là, il n'y a rien de plus,sauf ça, juste pour indiquer que j'ai un dessus-template, ici,
00:04:20 :et indiquer que j'ai un modèle d'utilisateur personnalisé.Voilà, il n'y a que ça, en plus.Maintenant.Donc, quand on regarde un peu les...Dans la doc de Wagtail, donc, si vous arrivez...
00:04:36 :On va partir sur le site de Wagtail.Hop.Vous arrivez sur le site.Comme on l'installe, c'est plus install Wagtail.Et après, il vous explique comment commencer.
00:04:46 :Vous avez des petites démos.Ça ressemble beaucoup à Django,parce qu'il faut faire un Wagtail start.Voilà.Alors que...Ça ressemble beaucoup à Django, voilà.
00:04:58 :Mais nous, ce qu'on va faire, c'est qu'on va faire comme sion avait un projet de Django,et on veut installer Wagtail dessus.Donc, la doc est bien foutue.
00:05:06 :Vous avez un...Dans la doc,une page qui vous explique comment faire.Donc, déjà, on va installer Wagtailsur le projet.Alors, du coup, ça me fait vachement...
00:05:18 :C'est assez gros pour moi, mais...Hop.Bon, Wagtail, c'est assez lourd à installer, donc...Il n'y a pas mal de choses, comme vous pouvez le voir.
00:05:32 :Voilà. On a installé Wagtail.Maintenant,dans les applications installées,il faut rajouter plusieurs lignes.Toutes ces lignes-là.Vous les voyez.Donc, les applications,elles sont là.
00:05:52 :Je vais les mettre ici.Hop.Donc, voilà. J'ai bien...J'ai bien les...les virgules et tout. OK.Ensuite,qu'est-ce qu'il veut ?Ah, donc, il faut rajouter un middleware.
00:06:10 :Ici, il faut rajouter un middleware Wagtail.On va le rajouter.Tac.Hop.On va le mettre à la fin.Middleware. On n'a pas d'autre à mettre.
00:06:25 :Alors, voilà. C'est intéressant.Donc, il nous faut des...Il nous faut bien avoir des fichierspour gérer nos fichiers statiques.Il nous faut nos constants, ici, et nos fichiers médias.
00:06:35 :Static route,il ne doit pas y être de base.Donc, on va faire comme ça.Si je m'adouis, si je n'y ai pas, il y a l'URL.
00:06:44 :Voilà.Toujours l'URL. Par contre,je n'aime pas faire comme ça, parce que moi, je ne fais pas avec OS.Donc, on va faire ça.Parce qu'il faut savoirqu'on va utiliserBaseDir, qui est ici.
00:06:58 :BaseDir, c'est un objetpass.On va faire comme si je...BaseDir, c'est un objet pass.Donc, on peut tenir directement comme ça.Voilà.Puisquej'utilise là l'objet passet BaseDir, il est là.
00:07:16 :Donc, c'est par an pour par anle chemin.Donc, voilà.Donc, 5Wactel utilise toujours OS.Dans sa doc, j'avais eu le coup pour...J'ai mis en production des projets Wactelet je l'ai fait embêter parce que j'avaisun bug, et en fait, c'est parce qu'il utilisetout le temps OS, et
00:07:35 :du coup, au niveau de la choisition des objetsOS et pass, ce n'est pas pareil.Donc, moi, tout ce qu'ils fontavec OS, ils le transforment enobjet pass. Voilà.
00:07:45 :Du coup,on était là.Il faut les fichiersde médias.Sur un projet Django normal, vous allezvoir.Là, c'est pareil.On va fairemédias.
00:08:04 :Vous allez voir que ça peut allertrès très vite à faire.Donc, là, il vous faitça, ça, ça, c'est bon.Les médias, ils veulent qu'on aitun...
00:08:16 :Bon, ça, je le metsen dessous. Et là,ça fait Wactel.On va laisser ça pour l'instant.Voilà.L'URL,je vais la copier.C'est pareil.
00:08:34 :Je vais la mettreici.Ça, c'est bon.Est-ce que je voulais faire beaucoupd'autres choses avec?On va spécifier plutôt...On va se mettre en local.
00:08:48 :Voilà.Ensuite,il vous demandede toucher au fichier d'URL.Si vous avez un projet Django en cours,il vous demande juste de rajouter ça.Dans l'URL patterns.
00:09:08 :Je vais le rajouter.Vous allez voir qu'il y a pas mal de...Je vais voir quels qu'il faut importer.Là, on vas'arrêter un petit peu.
00:09:18 :Je vais rajouter un petit peud'URL.Je vais rajouter un petit peuOn va s'arrêter un peuavec le setting.Dans l'URL, ici,un petit contrôle.
00:09:32 :C'est l'URL de setting,c'est ça?L'URL du projet.D'accord.Ce n'est pas celui de l'application.C'est vraimentdu projet.C'est vraiment le projet.C'est un peu...
00:09:50 :Vu que j'ai zoomé à fond, j'ai un peu de mal à naviguer.Donc là,il y a pas mal de choses à importer.Ce qui est pratique, c'est que...
00:09:58 :On peut faire un fil droit, on peut l'importer facilement.Mais ils vous mettent tous les importsici, si vous voulez.Vous allez voir à quel pointla documentation de l'actuelest énorme.
00:10:10 :Ok, celui-là.Voilà.Je crois qu'on a nos URLs qui sont faites.On a peut-êtreplus grand chose à faire.Admin, je ne touche pas.Ça, ça me plaît bien.
00:10:24 :Ah oui,forcément, on va rajouter ça.Hop.On va rajouter çasur notre URL.Je ne vais pas faire pareil.Je vais la faire à Django parce queje n'aime pas trop cette façon de faire.
00:10:40 :Tac.Hop.On va importer.Au passage, quand vous importez,les settings d'un projet,ne faites pasfrom.settings direct.Ce n'est pas une bonnemanière de faire.
00:10:58 :Vous faitesfromdjango.confimport settings.Et dans settings,il y a une constante qui s'appelledebug.Ok.Et là, on va faireifsettings.Voilà.Debug.
00:11:22 :Et on va faireun plus égal. On va implanter.Donc static,par contre, ça vient de nous.Tac.J'ai un bout de feu.Ça va être ça.
00:11:38 :Hop. Static.On va faire settings.Bon, là, je m'embête bien parce qu'en fait,on peutfacilement faire un copie-collerde la doc. Si je vous
00:11:50 :montre,tout est écrit ici.À la limite,ça, hop,on va m'user à recopier.Voilà.Pourquoi il me donne en jaune ?Static, il y en a quand même.
00:12:12 :Je l'ai importé.Je l'ai importé de ouf.Je vais savoir ce que c'est.Voilà, c'est mieux.Donc voilà.Django, c'est vrai que c'est aussiun framework assez lourd.
00:12:32 :Donc c'est bien de savoir où se trouventles classes, les fichiers.Mais là, vous voyez, c'est juste ça qui pose le problème.Donc voilà.Notre URL,elle est faite.
00:12:44 :User account, pour l'instant,ça n'en fiche.Bon, on va faire un make migrationdu coup.On va s'arrêter làpour ça. Et on vatorcer le make migration.
00:12:58 :Il n'y a pas de bug. Ça me fait plaisir.C'est un migrate.Alors, pour ceux qui connaissent Django,vous voyez qu'il y a 10 000 migrations qui se font,mais ça se voit quand même.
00:13:18 :C'est énorme.La première fois que je l'ai fait, j'étais choqué.J'étais scotché.Il m'a blindé la base de nezavant que ça commence le truc.
00:13:28 :Bon, voilà.On est pas mal.Du coup, j'en étais où ?On est pas mal.Voilà.Je voulais préciser que le but du projet,c'était de faire un blog.
00:13:44 :Je ne l'ai pas dit pour ceux qui sont arrivés l'an dernier.Donc là, je voulais faire un bloget je vais me le faire en Django pure.
00:13:50 :Je vais me le faire avec Hotel.Donc voilà. Maintenant,ce qu'on va faire, c'est qu'on vacréer une application de blog.C'est startup.Startup.Voilà.
00:14:04 :J'aimon application.On ne va pas oublierde la rajouter.Ça, c'est le truc.Quand j'ai commencé, c'était une erreur.Je crois que j'ai oublié.
00:14:18 :On a notre application de blog.Et puis, on va pouvoir commencerà créer notreapplication de blog.On va pouvoir commencer à la coder.Ce qu'on va voir avec Hotel, c'est qu'avec Django,on a l'habitude decréer des vues,enfin, de créer des modèles.
00:14:40 :Ensuite, les vues, ils les rendent dans un template.Là,on va faire différemment. Je vais écrire le templateà l'avance.On va faire différemment. C'est que là,
00:14:50 :dans le fichier de vue, il restera vide. On n'aura rien dedans.C'est un peu bizarre. Moi, c'est un peu dérouté au début.Tout va se passer dans les modèles.
00:14:58 :Tac.Ce qu'il faut savoir, du coup,il y a plusieurs choses à importer pour créerdes modèles avecHotel.Je vais les copier,sinon, parce que ça peut être très intéressantde vousfaire les imports un par un. Voilà, je vais les copier.
00:15:18 :Je dois déjà avoir des tas.Oula, il ne m'a pas copié.Ils sont où ?Putain, qui doit être là.Copié. Voilà.Donc,il y a plusieurs objets.
00:15:36 :Page, ça va vous permettre de créer vos modèles.Tout va vous permettrede créer vos modèles. Mais avec Django,vous héritez de modèles.Avec Wagtail, vous avez utilisé Page.
00:15:46 :Et quand vous regardez l'objet Page de Wagtail,OK, c'est un peu bizarre. Il y ad'autres choses.C'est des champs aussi, pareil.Oui, et quand vous regardez,je ne sais plus si c'est dans Abstract Page,ce n'est pas dans Abstract Page.
00:16:02 :On va regarderdans...En fait,ça hérite de modèle par modèlede Django. Ah, aussi, d'accord.Voilà. Donc, en fait,Page, ça hérite de modèle par modèle.
00:16:16 :Donc, voilà,il n'y a pas de magie.C'est presque.Du coup, le but,c'est de faire une page d'accueil de notre blog.On va se faire un premier modèle.
00:16:28 :On va l'appelerBlog avec Page.Ça ira très bien. Et on va hériter de Page.Donc là, on va utiliser le premier objetWagtail.Et dans notreattribut, dans notre champ,on va utiliserunRich Active Field.
00:16:50 :Ça, ça va être pour éditer un tiers de texte avancé.Voilà.Et ce qu'il faut toujours penser avec Wagtail,c'est que vu que c'est une administration qui est avancée,il faut toujours penser au côté administrationavec Wagtail.
00:17:02 :Donc, il faut toujoursdéfiniren surchargeau Content Panel.Donc, on va utiliser PageContent Panel,plus le champqu'on a rajouté.Donc, Field Panel.
00:17:20 :Et notre champ, il s'appelle Info.Voilà. Et ça, en fait, c'est pour l'administration Wagtail.Et voilà.Donc là, on a un premiermodèle Wagtailde base.
00:17:32 :Mais concrètement, ça va faire quoi dans lavue d'administration sur cette chose-là?Sur cette surcharge?L'administration ne l'a pas encore vue.On va la voir. On va faire un make
00:17:42 :niveauactions.Donc, voilà.Comme Django, on va lire notre migration. Comme Django.C'est pareil.On va faire un direct.Voilà. On a appliqué l'immigration.Par contre,si je ne dis pas de bêtises, je n'ai pas créé de super user.
00:18:02 :Donc, on va le faire maintenant.Je sais queceux qui sont habitués le connaissent.Super user, c'est ça.Il faut toujours avoirun utilisateur.Un homme ou pas.
00:18:18 :5.On va faire comme sur les autres.On peut le faire en avance.Bon, c'est qu'on voit l'utilisateur. Il fonctionne bien.Voilà. On a déjà
00:18:36 :un utilisateur. On a un premier modèle.Par contre, il vamanquer quelque chose.Il va falloir...Il va nous falloir un template pour notre modèle.
00:18:48 :Parce quequand on crée un modèle de Wackel comme ça,ça va être associer un template.Et en fait, vous allez voir,c'est tout bête.
00:18:58 :J'aime bien mettre un...On va faire ça.Le template qui va s'appelerun peu comme le modèle, mais en fait,entre chaquemajuscule, on va avoir desunderscores.
00:19:16 :Donc là, on va l'appelerBlogIndex.Je vais appeler Page.Voilà. Et comme ça,Wackel sait très bien que c'estle template qu'il va utiliserqui va tourner avec le modèle.
00:19:32 :Par contre, je m'étais faitnormalement...J'allais dire un template tout fait,parce que sinon, ça va pas être rigolo.Hop. Je vais juste étendre.Et je vais vous montrer le templatede base qu'il utilise.
00:19:46 :Hop, hop.Oui, donc j'aiprévu un template de base.En fait,c'est du bootstrap. Il n'y a riende fou.Title, j'ai bien un bloc. C'est pour pouvoir avoir
00:20:00 :un titre différent pour chaque page que je vais créer.J'ai un menuavec...Il y a juste dans le menu, il y a juste ça.
00:20:08 :Il y a un élément.Deux éléments. Il y a contact, mais ça, il n'y aura rien.Il sera vide. Et PageUpdate,ce qu'on fait là-dessus, c'est pour revenir en gros à l'indexdu blog.
00:20:18 :C'est tout. Et oui, puis j'ai mis çaà la fin.C'est pour aller sur l'administrationDjango, et çapar l'administration Wackel.C'est tout.À chaque fois que je vaisfaire Extents de base pour HTML,j'ai utilisé ce HTML-là.
00:20:36 :Tout ce HTML-là.Moi, j'aurais juste à rajouterles éléments que je veuxdans le body, ici.En appelant mes blocs, ici.Tout ce que je vais faire là, en fait, ça sera vraimentrajouté ici, dans le HTML.
00:20:50 :Donc, voilà.Du coup, je reprends.Ce qu'on va faire, c'est que, déjà,il faut toujours importerles, on appelle ça,les packs de Wackel, parce que sinon, forcément,ça ne fonctionnera pas.
00:21:10 :Bien que le Wackel image, on ne va pas s'en servir ici,je le sais quand même, maison n'aura pas le temps, sinon, de tout voir.
00:21:16 :Donc là, j'ai crééun petit template de base.Et je vous explique.Dans le body.Donc là, ce qui se passe, c'est quedans notre modèle,avec le Wackel,il y a toujours un titre de la page.
00:21:32 :Et ici, on vavoir l'intro, et l'intro, c'est ce qu'on adéfini ici. Voilà.Je pense qu'on a tout pourlancer le serveur.Pour ceux qui connaissent PageFarm,je vais juste me faire une petite config rapide.
00:21:46 :Hop, hop.On envoie quel blog.Manage.Enfin, on va retaper la commande à chaque point.Endurance server.Et on va espérer que ça se lance.
00:21:58 :Est-ce que j'ai rien oublié ?Si, je pense que je vais avoir un petit souci.On va voir. Ouais, c'est normal.Hop là.Bah forcément, j'ai rien créé.
00:22:10 :Donc l'administration de Wackel, elle est dans CMS.Voilà.Parce que, si vous vous souvenez bien,dans cette...Je sais plus où je l'ai mis, voilà.
00:22:20 :Dans URL, excusez-moi.Hispice avec l'administration Wackel.L'administration Wackel.Euh, voilà.Euh, vas-y, vous pouvez retourner.Tac.Donc mon email, il est bon, voilà.Donc là, c'est VR,j'ai rien et il met une pageafin que je la dégage parce que je ne veux pasqu'il y ait une autre page.
00:22:42 :Je peux la supprimer, je ne sais plus.Ici, tac.Voilà.Je supprime.Les paramètres... Alors,avec Wackel, je ne l'ai pas encore supprimé,on peut faire du multi-sites.
00:22:56 :On peut gérer plusieurs sites à la fois.Mais là, on va se contenter dese faire un sitelocal-host avecune majorité de Wackelmate.Euh, je n'ai pas de page racinaireencore, mais je crois que ça ne marche passi je n'en ai pas. Non, je vais devoir la faire avant.
00:23:12 :Du coup,euh,c'est pas grave.Voilà, on va se faire une première page.C'est notre modèle qu'on a fait tout à l'heure.Ça s'appelle blog-index-page.
00:23:24 :Vous pouvez le voir, ça se passe tout seul.Donc, vous avez le contenu,ça va être vraiment le contenu de la pageet toujours rien. Toujours les promotions
00:23:32 :parce que Watttail est toujoursest vachement opé sur tout ce quiesttout ce qui est SEO.Donc, ils ont tout prévu. Voilà.Mais le slug, moi, je vais mettre blogpour que vous puissiez comprendre pourquoi.
00:23:46 :Là, je n'ai rien. On ne va pas faire de SEO.De toute façon,là, je vais l'appelerindex-du-blog.Et puis ici, je peux mettrealors,l'intérêt de Watttail, c'est qu'ici, on arich-text-field.
00:24:02 :Ce que je disais, c'est que là, maintenant, on peut choisirun peu notre type desaisie.Donc, je fais mon index.Je peux très bienimporter une image, un document,une liste à puces.
00:24:16 :C'est vraiment génial.Une image, hop, je peux transférer une image.Voilà. Il n'y a vraiment aucunproblème.Voilà. Et je faisbienvenuesur le blog.
00:24:30 :On va laisser comme ça.On peut enregistrer un brouillon.On peut aussipublier ou se mettre au modérateur.Voilà. Donc là,la première page est publiée.
00:24:44 :Ce que je disais tout à l'heure, c'est quedans les settings,voilà, site. Maintenant, on vase poster un site.Donc, localhost, je vais l'appeler. Là, c'est du localhost.
00:24:54 :Et en page racine, on va avoirnotre index-du-blog. Hop.Oui.Voilà.Je regarde si je n'ai pas fait de...Je réfléchis vite fait. Ça devrait être bon.
00:25:08 :Quand vous regardez sur lessettings, sur l'URL, excusez-moi,les local URLs,c'est pages.Du coup, dans votre projet, si on veut se prendreà l'index du projet,on va voir si ça fonctionne.
00:25:24 :Si j'ai rien oublié,il faut mettre...Voilà. C'est ça. C'est bon.Maintenant, pages.Moi, ça m'embête d'avoir pages ici.J'ai envie, dès qu'on arrive vraimentsur l'index-du-blog, quand je suis là,ce que je vais faire.
00:25:40 :Rien de compliqué. Pages ici.Hop.Je relance mon serveur pour être sûrque...Ici.Et voilà. Donc là, je suis surl'index de mon blog. Vous pouvez mettre ce que vous voulez.
00:25:56 :Après, vous pouvez mettre des cordes de messages ou...Moi, si je veux que vous montiezrapidement, sur mon site perso,j'ai une page un peu debienvenue. Après, j'ai un modèle qui va
00:26:06 :gérer les projets. Et après,j'ai des sous-pages de projets. Voilà.Pareil pour le blog. J'ai un bon blog.Des sous-pages de blog. Et ça, par contre,
00:26:14 :le contact, c'est du pur Django ici.Je mélange les deux. Je hybride un peu les projets.Et vous avez... Enfin, on ne va pas le voir ce soir,
00:26:20 :mais vraiment, ce qui est intéressant avec Wacken, c'est d'hybriderun peu tous les objets. C'est quevous avez la puissance de Django et en plus de Wacken.
00:26:26 :Donc, du coup,j'en étais où ?Euh... Voilà. On a fait notrenumération. On a...Ben, on va ajouter un modèlepour ajouter des...des articles de blog.
00:26:40 :Euh... Ouais, on va faire ça.On va passer à l'étude directe.On va faire ça.Donc, si je retourne dans Models...Tac, tac.Hop. On va se faire une classe
00:26:54 :qu'on va appeler BlogPage.Si vous n'allez pas dans la doc de Wacken,ils ont un projetqui est quasiment identiqueet qui est facile à suivre.
00:27:04 :Donc, c'est bien pourrapprondre. Tac.Alors, qu'est-ce qu'on veut dans notre page de blog ?On veut avoir une date de publication.Donc là, on va utiliser un objetDjango. On va utiliser
00:27:16 :le...DateField peut-être paraît pas mal.Hop. Comme Django,j'ai un nom, une date depublication.Si je vais trop vite, vous le dites. Mais...Hop. On a une introduction.
00:27:30 :Donc, c'est le RichTextField.Voilà.On va avoir un body.Alors là, par contre, vous allez voirà quel point c'est un truc de fou.On va utiliser ce qu'on appelle un StreamField.
00:27:42 :Alors ça, attention.Moi, ça m'afait halluciner la première fois que j'ai vu ça.On va avoirdans le StreamField un truc qu'on va appelerParagraph.
00:27:56 :Paragraph.Voilà. Hop.Et on va utiliserBlocks.RichTextBlocks.En fait,un StreamField, vous allez comprendre aprèsquand vous allez le voir au tour d'en live,ça va être une suite de blocs qu'on peut empilerpour composer un article.
00:28:14 :Et je pense que là, il y en a plus d'unqui vont aimer.Hop là.Ensuite, on va avoirune partie qu'on va appelerCode.
00:28:26 :Ouais, si, on va dire.On va peut-être pas le faire. Je vais voir.Pour l'instant, dans le StreamField, on va utiliserque les RichTextBlocks eton va essayer après de mettre le code.
00:28:36 :Je pense qu'on aura plein.Parce que sinon, il n'y a pastrop intérêt d'avoir juste un bloc dans un StreamField.Tac.C'est un petit paramètreà la voie actuelle qu'il faut rajouter.
00:28:48 :Voilà.Ensuite, c'est biencette voie actuelle d'inclure unsystème de moteur de recherche.Perso, je l'ai fait toujours moi-même.C'est un mauvais projet.Mais là, avec Wagtail, j'avoue que j'utiliseleur moteur de recherchequi est déjà intégré, qui est sympa.
00:29:06 :Malheureusement, je n'aurai pas le temps de le montrer ce soirparce que ça va rajouter beaucoup de choses.Mais il faut savoir que pour indexer les donnéesdans un moteur de recherche Wagtail, on va utiliserun SearchField.
00:29:16 :Voilà.Donc, ça, c'est vraiment la base.Ettac.Et là, on va faireindex.Je n'ai plus lancé index.La classe SearchField, voilà.Notre champ intro.
00:29:34 :Donc, on va aller chercher dans le champ intro.Index.SearchField. On va aller chercher dansle champ Body.Voilà. Et tout simplement. Donc maintenant, en fait,
00:29:46 :si jamais on a mis en placeun moteur de recherche, on pourra allerrechercher dans l'introduction et le Body.Et ensuite,il faut penser toujours, comme je disais tout à l'heure,à l'administration. Donc, Page.ContentPanels.
00:29:58 :On va rajouterce qu'on a rajouté au champ.Donc, FieldPanel.On avait la date.J'ai mis quoi ?J'ai mis l'intro.Et j'ai mispar le Body. Merci.
00:30:20 :Tac.Par le Body.Et ça me paraît déjà pas mal. On ne va pas s'amuserà mettre des galeries d'images et tout.On n'a pas le temps de tout ça.
00:30:30 :Les départs en taquets, on peut en parler une prochaine fois.Ouais. Tac.Du coup, je pense qu'on peutattaquer une migration.Ouais.On va faire ça. Allez hop.
00:30:44 :Ça me paraît assez complet.MakeMeAction.Pas de bug.Merci.C'est la hantise d'avoirun bug en live, en fait.Voilà. Donc,c'est créé. C'est dans les tables.
00:31:00 :Il n'y a pas de soucis.Maintenant, le problème, c'est que quand on écrit un article,il faut bien qu'il apparaissesur l'indexde blog.Donc, ce qu'on va faire, c'est qu'on varajouter une portionde code.
00:31:16 :J'ai préparé d'avance mon template. Normalement,c'est ça.Je vais vous expliquer ce qu'il se passe ici.Avec...En fait,là, on fait unpage.getFieldRun.
00:31:32 :Page, c'est notre modèleblog index pagequi est ici.Et on va lui associeren page enfant notre modèleblog page.Du coup, on va faire forPostpage.getFieldRun. Donc, on va associer tous les enfants.
00:31:48 :Tous les enfants.Voilà, ça fait la variété post.Donc là, on va mettre post.honor,c'est pour avoir l'auteur.Post.specifique.title. Alors, je metsspécifique ici, c'est parce que...
00:32:02 :Je crois que ça, ça marcherait aussi.Parce que c'est des champs que j'ai rajoutés.Donc,alors que...C'est pas des champs par défaut,ça.
00:32:16 :Ouais, ouais, en général, je rajoute spécifique quand il y a deschamps que je rajoute, moi, dans la page.Parce que page, normalement,on va vérifier tout de suite.
00:32:24 :Fais pas de bêtises.Ouais, il y a toujours title. Donc, ici, spécifique.title,normalement, c'est l'obligatoire de mettre spécifique avec title.Bon, on peut l'essayer si ça fonctionne.
00:32:32 :Mais dès que j'ajoute des champs,moi, que je recharge, je rajoute spécifique.Parce que là, par contre, je suis pas sûr qu'ils comprennent du coup.
00:32:38 :Peut-être.Je regarderai la prochaine fois.J'y pense en vous le disant.Bref, quand c'est des champs que vous rajoutez,comme intro, date, machin,rajoutez spécifique. Toujours.
00:32:50 :Sinon, c'est pas grave, ça fera office de bonne pratique.Ouais, voilà, c'est ça.Et puis,là, vous avezle page url.C'est un tag de votre page.
00:33:02 :Pour aller vers votrepage en sourd, en fait.Tout simplement. Mais pour ça, il faudra qu'on créeun article.Ou deux.Euh...J'ai gardé ou pas mon...
00:33:16 :Est-ce que j'ai gardémon page là-haut ?Donc là, excusez-moi.J'ai rechargé la page.Du coup,voilà. Donc,on avait bien notre page de créé.
00:33:30 :Index blog, tout à l'heure.J'ai lancé une sous-page. En sous-page,je vais prendre mon index blog page.J'ai pas fait un... J'sais pas, attends.Donc voilà. Donc ici,
00:33:40 :je vais l'appeler mon...Mon article. Je vais l'appeler, je sais pas...Mon premier article. On est...Aujourd'hui.En introduction, on va mettre...Hop là.Titre de...
00:33:56 :Non, on va mettre juste un texte normal.On va se faire un petit lorraine.Un lorraine.Ça sera plus cool.Je vais faire n'importe quoi, c'est pas grave. Allez, hop.
00:34:08 :Bon, allez, hop.Mon premier article.Embody.Donc là, j'ai mis...Alors, le stream feed,ici, c'est...Le stream feed, c'est que j'ai...En fait, j'ai misqu'un bloc, un bloc paragraphe, on l'a vu tout à l'heure.
00:34:30 :Mais quand je rechercherais plusieurs blocs, on pourrait très bien mettre un bloc codeet on pourrait dérouler du code,par exemple. Voilà.Mais là, j'ai mis que paragraphes en un sens.
00:34:38 :On verra après.Donc là, j'ai un premier article, voilà.On va le... En brouillon.Ouais, le template, ici, à la droite,c'est la prévisibilisation en ixpa.
00:34:50 :Je n'ai pas encore fait le template. Donc, je vais le faire après.Juste, il faut savoirquand vous écrivez un article,vous avez un système de workflowqui est possible de mettre en place avec Watttail.
00:35:02 :Quand vous travaillez en équipe,il va y avoir des éditeurs qui écrivent l'articleet ensuite, ça va être des modérateurs qui vont trouver l'article.Voilà. Mais dans tous les cas,
00:35:10 :quand vous travaillez en équipe avec Watttail,vous pouvez ajouter des commentaires.Ici, je fais mon commentaire.Je commente.J'enregistre le brouillon.Voilà. Et la personne qui arrive derrière vous,
00:35:22 :elle sait qu'ici, c'est surligné en bleu.Elle clique. Et boum, elle voit le commentairequi a été émis.Et après, je ne sais pas, vous êtes en équipe,vous pouvez mettre vos réponses.
00:35:32 :Hop. Tac.Et voilà, du coup,on crée des petits trucs comme ça sur les portions du texteet les portions de l'article.Voilà.Je trouve ça assez cool.
00:35:44 :Voilà. On a un premier article qui a été écritque j'aijuste enregistré en brouillon.Voilà.On va s'amuser à aller en faireun deuxième.
00:35:56 :Donc là, j'ai le premier article.C'est une sous-page de notre page.Le deuxième.Voilà.On va le mettre au 6.On va le mettre au 8.
00:36:08 :C'est ce qui sera le plus intéressant pour l'instant.On va le mettre par là.Après, on va mettre un bloc.On enregistre.Hop.Il y avait un troisième pour le fun.
00:36:20 :Alors, j'ai mes enfants qui sont arrivés à la maison.Ce n'est pas si agréable.Troisième article.Hop.On va le mettre au 7.Intro, le 3ème.
00:36:34 :Si je fais des fautes maintenant, ce n'est pas grave.Et voilà.Maintenant,on a les salaires qu'il nous fallait.Template, forcément, pour affichernos articles.
00:36:46 :Donc, si vous avez suivi le truc,ici, ça s'appelle bloc page.Donc, le template doit s'appeler...C'est ça.Et voilà.Vous avez votre bloc page.
00:37:00 :J'ai préparé un template tout seulparce qu'il ne faut pas déconner.On va faire du HTML.On va faire du HTML.J'ai préparéd'avance le HTML.
00:37:12 :Voilà.Le titre de la page en titel.J'ai remisle titre ici.La date,l'introduction,le corps.Ça me paraît pas mal.Ça me paraît pas mal.
00:37:30 :On va refaire un tourdu côté de l'administration pour voir si çafonctionne bienla visualisation.Il y a une situationbruyante.Et ça marche.
00:37:44 :Voilà. On peut voir à quoi va ressembler votre pagela carte-tic. Là, il n'y a pas vraiment de...de CSS. Il n'y a rien.
00:37:52 :Mais maintenant, si on vaici, on a bien des articles qui apparaissent.Seulement, j'ai un problème.C'est que si vous avez bien vu,l'article n'est pas tout lié.
00:38:04 :Enfin, tous les articles.Je n'ai juste pas réussi à les brouiller.En fait, par défaut,Wacom ne gère pas ça.Pour ça,il y a plein de trucs à faire.
00:38:16 :Il faut le coder.Il faut le coder. Pas le choix.Et ça va se passerdu coup, on va le fairedans le modèle. Dans le modèle de blog page.
Aucune occurrence trouvée pour « ».