Session du 03 juillet 2025 à 21h00
Développement Web & Frameworks
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat spéciale Wagtail !
Mentorat spécial d'1h pour ce début d'été !
On va voir ce qu'est Wagtail pour créer un CMS complet et ultra personnalisable à partir de Django.
00:00:00 :Ok, alors, c'est plus du coup, voilà, ça enregistre.Je demande du coup de répondre à tout le monde.Du coup, ça va être du Wagtail, comme je l'avais annoncé.
00:00:12 :Wagtail, du coup, très peu connu dans le monde francophone, mais vraiment très peu connu.Je le vois quand je poste sur Linkedin ou autre.Je remarque qu'il y a beaucoup de réactions parce que les gens ne connaissent pas forcément.
00:00:27 :Le peu qui connaissent, ils n'ont pas trop testé et ils trouvent ça vachement cool.Dans le monde anglo-saxon, c'est vachement connu.Et du coup, moi, je me suis beaucoup, beaucoup intéressé.
00:00:43 :Je ne connais pas tout, forcément.Il y a même des choses que je fais par automatisme, que j'ai appris dessus.Des concepts où je devrais vraiment, entre guillemets, réviser pour bien les connaître.
00:00:54 :Mais vous avez l'air qu'on peut faire des trucs de fous avec.Pour le format de ce soir, je vais annoncer une heure.On va voir.
00:01:04 :En fait, je voulais faire du coding live, entre guillemets, mais ce serait moins intéressant,je pense, que de parler des projets que j'ai faits avec.
00:01:14 :Les codes sources des projets que j'ai faits avec, je peux en parler parce qu'il y en a un.C'est mon site à moi perso, donc je m'en fous.
00:01:20 :Et le deuxième, c'est pour une commune.Ils s'en fichent.Donc, ce n'est pas dérangeant.Est-ce qu'il y en a qui ont une petite idée de ce que c'est WhatsApp ou pas du tout ?
00:01:33 :Non.Non, pas trop.Ok.On voit mon écran ou pas, là ?Oui, on voit.Oui, c'est bon.Comme je disais, pas très connu en France.
00:01:52 :C'était au mois d'octobre.J'étais speaker avec...Je ne sais pas si il y en a qui connaissent Cyril Chapuis.Peut-être qu'ils l'ont connu sur Duck String.
00:02:05 :Je ne vous dis rien.Il était mentor sur Duck String jusqu'au mois de décembre à peu près.Il connaît très très très bien Rocktail, mieux que moi.
00:02:19 :Du coup, on était speaker tous les deux à la PyCon en octobre sur Rocktail.Du coup, qu'est-ce que c'est Rocktail ?C'est un peu écrit sur la page.
00:02:32 :C'est un peu écrit.Vous allez pouvoir vous créer un CMS maison avec Rocktail.Ce n'est pas comme du WordPress où vous allez pouvoir faire du no-code.
00:02:44 :Là, ça va être à vous de développer le CMS.Il y a déjà plein de classes de fait, mais c'est vraiment énorme.Vous allez voir.
00:02:51 :Il existe déjà plein de classes toutes prêtes.Ça peut aller très vite à se faire un CMS.Pour info, vu que je parle de Rocktail, je vais en parler aussi.
00:03:01 :Il existe Django CMS.Pour ceux qui veulent se faire un espèce de WordPress, mais à la Django.Je ne sais pas si vous connaissez Django CMS ou pas du tout.
00:03:14 :Non.Je lance l'info.Vous pouvez regarder.Ils ont une démo live.Je crois qu'il faut la demander.Il faut faire une demande.Oui, c'est ça.
00:03:27 :Il faut faire une demande.C'est sympa.Je vais tester, mais très rapidement.Je pense que je vais m'y intéresser quand j'aurai le temps.Mais je suis tellement à fond dans Rocktail que pour mes CMS,je n'ai besoin de rien d'autre pour l'instant.
00:03:39 :Du coup, je vais juste vous montrer quelque chose dans la doc de Rocktailqui va peut-être beaucoup vous aider.Dans Get Started,il y a ici Build Your First Site.
00:03:54 :Ce lien-là vous met déjà un pied à l'étrier complètementdans le sens où ça va vous apprendre à vous créer un premier site.Déjà, ça, c'est pas mal.
00:04:07 :Si je reviens là,vous l'installez comme une librairie normale.Rocktail, c'est construit sur Django.Vous allez voir qu'on peut interagir avec nos objets Django, Rocktail,comme on veut.
00:04:24 :Ce qui est énorme,c'est que l'administration de Rocktail est hyper bien foutue.Vous allez voir que vous pouvez carrément intégrer vos modèles Djangodans l'admin Rocktail.
00:04:36 :Là, pour le site de la commune,vous pensez que ça ne vous dérange pas.D'ailleurs, ça ne vous dérangera pas.Je vais mettre le commande admin déjà.
00:04:47 :Par exemple, là, c'est l'administration Rocktail.On voit qu'ici, ce qui est dans le menu,ce qui est dans le menu, on voit.Je vous le dis, ça, c'est des modèles Djangoque je peux gérer directement depuis l'administration.
00:05:10 :C'est un petit spoiler.On verra après tout ça.Je pense qu'on va commencer maintenant.J'aurais bien voulu cloner ça.Je vais vous montrer comment on lance un projet Rocktail.
00:05:27 :On va commencer par la base.J'étais sur mon site perso.On verra plus ça après.Pour l'instant, ça va ?On peut y aller ?
00:05:35 :Oui.C'est bien de parler.C'est parti.On va l'appeler WAG.C'est très bien.Là, en gros, on va déjà se créercomme on fait normalement avec Pythonen environnement virtuel.
00:05:58 :Il y en a qui doivent utiliser UV.Moi, je suis encore à l'ancienne.Je suis avec du Python.Et maintenant, on va aller se sourcer.
00:06:09 :Pour l'installer,on s'installe WAG.Vous allez voir, ça installe pas mal de choses.Là, j'ai installé Rocktail.Et vous voyez que j'ai déjà tout ça qui est installé.
00:06:34 :Donc, ça fait quand même pas mal de choses.Maintenant, si vous voulez créer...Tout le monde est habitué avec Django ici.Avec Django, vous faites quoi ?
00:06:51 :Vous faites un Django Admin, Star Project, c'est ça ?Oui.OK.Là, on fait un Wagtail Start.Voilà.Et en fait, là, j'ai créé mon projet Wagtail.
00:07:08 :Et vous allez voir que c'est Djangoavec pas mal de différences quand mêmesur la base de code.Hop là.Alors, ne faites pas attention aux deux cœurs.
00:07:18 :Je ne vais pas m'en servir.OK, j'ai envie de bien activer.Alors, eux, ils recommandent toujoursdans la doc, je l'ai vue,de faire un petit people install R.
00:07:34 :Et être sûr que tout est bien installé.Parce qu'en fait, ils ont déjà les reprogrammes.OK. Donc là, vous voyez, Wagtail,on a la version 7.1.
00:07:45 :Et du coup, ils vous mettent Django avec.Par contre, Wagtail, il y a un truc qui me...Quand je regarde, s'il n'y a pas le GitHub...
00:07:55 :Je regarde juste quelque chose rapidement.Ah, 7.0.1, c'est vrai. OK.OK. Je y retourne.Donc, là, en fait, vous avez initié le projet.Donc, les deux cœurs, on ne va pas s'embêter.
00:08:12 :On va le supprimer.Voilà.Donc, le projet est initié.Et il y a déjà trois applications.On va commencer par là, déjà.Alors, à savoir que si vous avez un projet Django,vous pouvez installer Wagtail par-dessus,alors que vous avez déjà initié le projet Django.
00:08:34 :Avant, c'était plus mon truc de partir dans un projet Djangoet d'en installer Wagtail.Mais en fait, je me rends compte que maintenant,je préfère directement partir dans un projet Wagtail.
00:08:41 :En fait, c'est beaucoup mieux.C'est carrément mieux, même.Mais l'architecture, en fait, peut être un peu déroutée au début.On a déjà ici le dossier projet.
00:08:50 :Ce que j'ai fait, mon Wagtail Start Project.Déjà, les settings.En fait, ce n'est pas un fichier de settings pour un Pi.Ça va être un package.
00:09:03 :Et tout de suite, on a du coup les settings de base,de développement et de production.Je vous montrerai comment je gère ça un mois après,ma façon de faire.
00:09:14 :Il y a dedans les statiques.Alors, je crois qu'avant, c'est une nouvelle version.Parce qu'avant, c'était directement au niveau du Base.Avec un CSS de base.
00:09:26 :Mais il n'y a rien dedans.Le JS, c'est pareil, il n'y a rien dedans.En fait, il prépare déjà beaucoup de choses à l'avance.Il prépare beaucoup de choses pour nous.
00:09:36 :Il y a même les templates.Le base.html, qui est déjà prêt.Les 500, les 404, ainsi de suite.Et au niveau des URL,quand on regarde,je vais agrandir un peu le top là.
00:09:50 :Au niveau des URL, c'est pareil.Il y a déjà plein de choses de faitesque vous faites normalement avec Django, pour certaines.Et sinon, il vous prépare vraiment tout.
00:10:01 :On va commencer par les settings.Les settings de base.Déjà, ce qui peut un peu, pas choquer,mais ce qui peut paraître bizarre, c'est queavec Django, j'imagine que vous êtes habitués avec passe libre.
00:10:19 :Avec WhatsApp, c'est OS.Je ne sais pas s'il y en a qui ont déjà fait gaffe.Dites-moi, n'hésitez pas.Me coupez-moi la parole, il n'y a pas de problème.
00:10:28 :Là, par contre, faites gaffe.Il faut le savoir.Une fois que je me suis fait avoir,je ne sais plus ce que je fais.Ça ne marche pas.
00:10:42 :Ils font ça avec OS directement.Donc, on est vraiment sur de l'OS.Mais bon, après, c'est pareil.On a un Base.dir.Eux, ils rajoutent un Project.dir.
00:10:49 :Donc, le dossier Project, ici.On récupère le Project.dir.Et on a un Base.dir qui va récupérer notre dossier de base.Et en fait, il y a déjà toutes les applications qui sont installées.
00:11:02 :Il y en a beaucoup.Notamment Search et Home, qu'on a vu.Et après, tout ce qui est WhatsApp.Donc là, je montre un peu l'architecture d'un projet de base.
00:11:14 :Mais après, on va voir mes projets à moi,un peu comment j'ai fait, ce que j'ai fait.Et on verra comment ils tournent.On continue.
00:11:32 :Il y a des Middleware et notamment ceux de Wagtail.Hop.Il y a le dossier Templates, ici.Donc, en fait, eux, ils référencent déjà le dossier Templates qui est ici.
00:11:47 :Puisque ce n'est pas une application, c'est le dossier du projet.Du coup, ils le référencent pour qu'il soit lu, entre guillemets, par l'application.Donc là, bon, c'est assez basique.
00:11:55 :Vous avez déjà vu ça avec Django.Alors là, ils mettent la base donnée directement ici dans Base.Mode de tête, je vire ça.Je ne l'avais pas ici.
00:12:06 :Donc, je mets ça avant.Gros, vous connaissez.On va voir ce qu'il y a de nouveau.Donc, le langage code, on va le mettre en français maintenant.
00:12:13 :Bien qu'on ne va pas rester longtemps sur l'application Test.Qu'est-ce qu'il y a de nouveau ?Après, il y a déjà plein de choses de faites.
00:12:23 :Quand vous regardez, il y a déjà les Statics, Roots, SQL.Mais il y a Roots et URL.Ça, en général, il n'y a pas de base.
00:12:29 :Il y en a qu'un qui est déjà mis de base, en général, avec Django.Mais là, il vous met déjà toute base.Tout est fait.
00:12:36 :Tout est mis.Ils redéfinissent des constantes qui sont existantes avec Django,mais qui ne sont pas à redéfinir.Avec Wagtail, ils sont override,puisque dans vos modèles Wagtail,vous allez voir qu'ils peuvent être plus lourds que les modèles Django.
00:12:58 :Ça, c'est pour personnaliser le nom de l'administration Wagtail.Vous allez voir qu'avec Wagtail,vous avez un moteur de recherche qui est intégré directement.Moi, par exemple, j'en fais souvent dans Django, mais je l'ai fait maison.
00:13:14 :Et eux, en fait, ils ont déjà tout intégré dedans.Et ça, c'est la base URL.Ça, on s'en sert pour...Dans l'administration, en fait...Comment je peux l'expliquer ?
00:13:37 :Par exemple, vous allez avoir dans les e-mails...C'est pas facile à expliquer. Comment je peux le dire ?En gros, pour les aperçus depuis l'administration,les e-mails, les notifications,c'est important de définir cette constante-là.
00:13:59 :Ça va être l'URL de base qui va être configurée.Et ensuite, vous allez voir, on va en parler après,les documents, en fait.Ici, vous allez définir une liste d'extensions qui vont être acceptées.
00:14:16 :Et donc là, c'est la base.Ensuite, vous avez le mode développement, on va dire.Hop.Et en gros, ce qui va vous permettre...Et le mode production.
00:14:27 :Hop.Et en gros, ça vous permet que quand vous êtes en production,vous pointez, par exemple, que vous êtes en développement.Vous allez pointer ici sur les settings de développementpuisque vous importez tout de la baseplus des spécificités pour le développementet spécificités pour le mode production.
00:14:51 :Développement et spécificités pour la production.Alors, ici, ils vous mettent la base donnéedans le base.py.Moi, ce que je fais, c'est que ça se déplace.
00:15:05 :Je vais renseigner ici une base MySQL.Voilà.Est-ce que pour l'instant, ça va ?C'est pas trop fouillis ?Dites-moi si ça part un peu...
00:15:21 :Non, non, c'est bon.Pour tout le monde, c'est bon ?Ok.Je continue.Donc ça, c'est la partie settings qui peut paraître un petit peu déroulante au début.
00:15:34 :Elle est faite différemment.Mais c'est très bien.Maintenant, même avec le projet Django, je vais faire comme ça aussi.Je vais avoir du base, du dev, du production.
00:15:41 :C'est pas mal.Alors.Hop.Ensuite.Les URL, vous les montrez maintenant.Ici, il nous prévoit l'URL pour l'administration Django.C'est plus admin, c'est Django admin.
00:15:54 :Puisque si vous allez sur l'URL admin, ça sera l'admin Wagtail, de base.Voilà.Voilà.Vous allez voir, Wagtail, c'est vraiment un...Moi, je dis toujours, c'est un framework dans le framework.
00:16:08 :Là, c'est pour gérer les documents.Ici, c'est pour le moteur de recherche.C'est le moteur de recherche.Et ici, ils vont vous gérer tout ce qui est...
00:16:18 :Quand vous êtes en mode debug à Swoo, tout ce qui est médias.Jusqu'à Django, si vous en faites, vous savez que tout ce qui est médias,c'est géré différemment en production ou en local.
00:16:33 :Donc là, ils ont déjà tout prévu.Tout ça, vous devez le mettre à chaque fois dans vos projets Django, manuellement.Là, c'est déjà fait.Donc, c'est pas mal.
00:16:42 :Et ici, ça va être les URL de Wagtail.Alors, je vais vous montrer, du coup, comment ça marche.Je pense que le mieux, c'est de vous montrer comment ça marche.
00:16:56 :On va se créer, entre guillemets, une page, une vue Wagtail.Une seule, on va coder ensemble.Et après, je vous montre, moi, mes projets.Voilà, ça peut être pas mal, ça.
00:17:06 :On va faire comme ça.On va juste regarder le début et puis...On va faire ça.Alors...Il y a une question, c'est...Le Wagtail, c'est aussi effet du MVT, l'architecture.
00:17:21 :Ah, ben justement, on va en parler, oui.Alors, il y a moyen de se faire de l'API aussi, mais je vais te montrer ça.Tu vas voir.
00:17:30 :Bon, on va le faire maintenant.On va dans Home, ici.Et en fait, pour la Home page, ils ont déjà prévu un modèle.Alors, le modèle, il est là.
00:17:41 :Il s'appelle Home page, tout simplement.Et donc...Et donc, et donc, on voit que Home page hérite de Page.Avec Django, vous héritez de Models et Formodels.
00:17:52 :Mais quand vous êtes dans Page...Hop.Donc là, je suis dans Page.Quand on va dans abstract page, ici...C'est pas ce que je voulais faire.
00:18:04 :Je recommence.J'étais dans Page, tac, je retourne.Et je crois que c'est ici.Voilà.On voit que dans l'héritage, on retrouve ici Models, Formodels de Django.
00:18:15 :Donc en gros, la classe Page, ici, dans l'héritage, vous allez retrouver les modèles de Django.Alors, la question sur le MVT.Le MVT, comment je vais l'expliquer ici ?
00:18:29 :Est-ce que je code un petit bout et après je montre ?Bon.Ouais, si, c'est à faire comme ça.OK.OK.Alors, en gros, là, la classe est vide.
00:18:39 :Il n'y a rien.Il y a l'héritage.Donc, en fait, il y a déjà au moins un titre.Il y a déjà au moins un titre.
00:18:46 :Je ne sais pas si on peut le voir, d'ailleurs, dans l'héritage.Hop là, l'abstract page, directement.Bah, j'étais dessus, en plus.Je suis bête.J'étais là.
00:18:55 :Hop là.Voilà, il y a déjà un title, ici.Et un slug.Donc, il y a déjà des choses, en fait.Alors, comment dire ?
00:19:03 :Ici, quand on va créer une classe Wagtail,quand on va créer une classe Wagtail,il faut qu'il y ait un template HTML qui corresponde.Parce que vous allez voir qu'en fait,on ne va pas créer de vue.
00:19:16 :On ne va pas créer de vue.On va juste créer des classes.Et, en fait, les vues seront gérées par les classes elles-mêmes.Donc là, on a la classe HomePage.
00:19:23 :Donc, on va avoir un template qui s'appelle...Donc là, on est avec le...le Snake Case.Ici, on va avoir du Snake Case.Il faut que ça corresponde.
00:19:31 :Ici, avant le P majuscule,on a bien ici l'underscore.Donc, on va voir.C'est comme ça que Wagtail, en fait,connecte ses templates aux modèles.
00:19:43 :C'est avec le nom des fichiers HTML.Donc, HomePage, HomePage.Là, il m'a mis quoi, du coup ?OK, j'ai un bloc content ici.Là, c'est le truc de base.
00:19:54 :Je regarde.Il fait ce qu'ils ont mis là.Je m'en souviens plus là-dedans.OK.Comme page.Je pense que c'est SS.Ouais, comme page.D'accord.
00:20:02 :OK.Donc, je ne vais même pas le coder en live.Je vais juste vous montrer sur mes projets directement.Ce sera plus intéressant.Ce sera plus intéressant.
00:20:11 :Mais c'est pour vous montrer, du coup,l'architecture de base du projet.Donc, après, c'est à vous de développervotre première classe.Et vous avez déjà une HomePage.
00:20:17 :Ce qu'on va regarder maintenant,ce qu'on va regarder maintenant,c'est qu'il y a un moteur de recherchequi est déjà prévu, en fait,avec une vue.
00:20:30 :Bon, là, c'est sur une vue traditionnelle, on va dire.On verra après les vues Wagtail.On va voir juste ça après.Comment ça marche.Donc, ici, ils ont déjà prévu un moteur de recherche.
00:20:40 :Ça, c'est déjà codé.Vous n'avez rien à faire.Voilà.Juste aller modifier, en fait,votre template, ici,pour l'adapter.Mais sinon, il y a déjà un moteur de recherche qui est fait.
00:20:50 :On va passer sur mes projets.Comme ça, je vais vous montrer tout le code.Et ce sera plus simple.Mais sinon, de base,si je fais ça,OK.
00:21:06 :Donc, ça, c'est bon.Quand on fait un migrate,je voulais juste vous montrer ça.Alors,ne soyez pas choqués,mais les migrates avec Wagtail d'Office,il y a beaucoup plus de choses.
00:21:16 :Voilà.C'est une migration de base avec Wagtail.Donc, il y a quand même beaucoup plus de choses, en fait,que ce qu'on peut faire.Donc, il y a quand même beaucoup plus de choses, en fait,qu'avec Django de base.
00:21:30 :Ça va, pour l'instant ?Ça fait beaucoup.Oui.OK.Bon, maintenant, on va passer dans le concret.On va voir comment ça fonctionne.OK.Alors.
00:21:44 :Est-ce que je passe sur ce projet-là ?Alors, je vais vous montrer celui-là.Parce que je crois que j'ai de l'héritage en plus dedans.Alors, ça serait embêtant.
00:22:00 :Je regarde juste quelque chose.Ma home page, elle est où ?Hop là.Ouais, ouais, ouais.Alors.OK.OK, ce n'est pas grave.On va partir là-dessus directement.
00:22:16 :Alors.Donc, ça, c'est un projetque j'ai développé pour une commune.Donc, on va partirdéjà un peu plus avancé,mais ce n'est pas grave.
00:22:25 :Est-ce que vous connaissezles modèles abstraitsavec Django ou pas ?Ouais, je crois.C'est, on dirait, un modèle de basequi…Toutes les classes vont acquitterun truc déjà.
00:22:40 :Ouais.En gros…En gros, ici,j'ai une base page, ici.En fait, elle me sert justeà avoir un champ body.Un champ body.Un champ bodyque toutes les pages…Voilà.
00:22:58 :Que toutes les pages, entre guillemets,parce que, moi,elles ont tout un body.Enfin, presque tout un body.Alors, si je regarde justeun truc vite fait,si je repars là-dessus dans le news,peut-être qu'elles ne l'ont pas,je crois.
00:23:07 :Ouais, c'est ça.Donc, en fait,on va peut-être commencer…Alors, voilà.On va commencer par une classe abstraite.En gros, ici,je me sers de cette classe.
00:23:15 :Donc, j'hérite de Page.C'est le modèle de basede Wagtail.Donc, chez Django,c'est Models for Models.Avec Wagtail, c'est Page.Et donc, j'ai une classe abstraiteoù j'aurai…J'ai ici un body.
00:23:25 :Donc, comme ça,je sais que toutes les classesqui vont en hériter,donc ce sera une classe Wagtail Page,mais en plus,il y aura déjà un body déjà de près.
00:23:33 :Bon.Je me suis un peu emballé.Est-ce qu'une classe abstraitepour ça, c'était utile ?Peut-être pas forcément.Donc, en gros,elles ont un bodyavec un riche textile de Wagtail.
00:23:42 :Donc là, on est vraimentsur des champs spécifiques Wagtail.Si je repars sur ma home page,alors,ici, vous voyezque j'hérite de cette classe-là.
00:23:52 :Donc, j'ai un body.Donc là, j'ai juste un body.Donc, en fait,je n'ai pas redaffiné d'autres champs.Donc, imaginez icique j'ai un body en riche textilequi hérite d'ici,qu'on a vu tout à l'heure,qui est là.
00:24:03 :Ce champ-là,du coup,c'est comme s'il était ici.Ensuite,vous allez dire dans le…dans le…dans le…dans le…dans le…dans le…dans le…dans le…dans le…dans le…dans l'administration,quel champ je veux rendre ?
00:24:24 :J'ai qu'un body ici.Donc, mon champ body,je le rends dans l'administration.OK ?Ce champ-là.Donc, ici,j'ai tous mes imports de Wagtail.Ensuite,la home page,forcément,je ne veux en avoir qu'une seule.
00:24:39 :Donc,je veux que les…je veux qu'il soit possibledans l'administrationde ne créer qu'une seule home page.Donc,si je vais,par exemple,j'aurais dû aller sur mon…retourner peut-êtresur mon site de base,sur mon Wag…je l'ai créé tout à l'heure.
00:24:58 :Désolé.Je voulais peut-être un peu avancer.Il est où,mon Wagtail ?Là.Je vais retourner ici rapidement.On était sur la home page,ici.
00:25:09 :On n'a pas définideux champs,mais en fait,on va en définir un ensemble.On va quand même voirà quoi ça ressemblesur ce projet-là avant.
00:25:18 :Donc,home page ici,tac,il est là.Ouais,c'est important,je pense,de voir quand même avantcomment ça fonctionne.Donc,je pense le montrer directement,mais non.
00:25:31 :Donc,on va se coder quand mêmeune petite page ensemblede manièreassez basique.Donc,ici,on va avoir la home page.On va aller,au moins,pour le principe.
00:25:42 :On va ici importer un champ.Hop,un field.On va la sélectionner.Celui-là,je l'aime bien.Très pratique.Et,il me propose ici.Eh bien,c'est celui-là.
00:25:55 :Très bien.Voilà.Hop là.On va y mettre.Et donc là,j'ai déjà un premier champ.J'ai déjà un premier champ.Et,on va aller,du coup,spécifier icicontent panels.
00:26:08 :Et en fait,ça va être pour rendre,euh,attendez,il me fait n'importe quoi.Hop là.Je vais le,je vais faire mes imports d'abord.
00:26:18 :Le content panels,en fait,c'est pour rendre nos champsdans l'administration Wagtail.Alors,comment ça se passe ?Donc,on va avoir,je vais l'enlever parce que ça va être chiant.
00:26:30 :Ils ne connaissent pas trop Wagtail,du coup,il est embêtant.Donc,on va d'abord,du coup,ici,avoir,rendre le,ce qui est de base dans une page,donc,dans le,l'attribut content panels,ici.
00:26:46 :Et,on va lui rajouter,les attributs que nous,on a,on a ajouté.Donc,le body.Donc,ce qu'on va faire ici,c'est qu'on va avoir besoin du fill panel.
00:26:56 :Donc,on va faire ça.On va avoir,pour admin,euh,c'est,euh,fill panel.Non.Euh,c'est dans panels alors,non,panels,import.Et là,vous allez comprendre facilement.
00:27:15 :Fill panels.Voilà.Et ici,du coup,on va spécifier,qu'on a,notre champ body.Voilà.Ce champ là,ici,on veut le rendre dans l'administration,de la page.
00:27:27 :Euh,ouais,on va rester là dessus.Hop,on va se refaire,euh,je ne sais plus s'il faut une migration,migration,mince.Make,euh,make,ouais.
00:27:47 :J'ai plus les yeux en face des trous,qu'est-ce qu'il me fait ?Ah,j'aurais dû faire ma migration après,putain,c'est pas grave.Euh,j'essaie de,hop là.
00:27:58 :On va faire plus simple,euh,l'initial.Euh,ou je vais faire une,euh,comment je vais le faire ?Ou sinon,ou sinon je vais faire un,hop là.
00:28:10 :Hop,hop,hop,on recommence.Mince,euh,non,je ne veux pas qu'il me fasse ça.C'est bizarre qu'il me demande,je ne vais pas supprimer mes migrations,je vais tout,euh,hop là.
00:28:30 :Euh,ça c'est quoi ?Celle-là c'est la page draft,ok.Celle-là,elle est de base normalement.Euh,elle est de base.Non,c'est pas grave.
00:28:41 :Euh,est-ce que je peux lui mettre un défaut comme ça,lui ?Est-ce que je peux lui mettre un,le tac ?Bon,on va essayer comme ça.
00:28:52 :Ok,ça va passer.Ça va passer,je pense.Ok,bon,euh,ne faites pas attention aux défauts ici.Maintenant,j'allais oublier,on va se créer un supervisor.
00:29:11 :Hop,euh,je vais l'appeler obligable 117.Hop.Je voulais juste vous montrer une classe,en fait,de base,et après on va aller sur mes projets.
00:29:31 :Ce sera mieux que de partir d'un truc,voilà.Ok,c'est parti.Hop.Ok,donc là,ici,il est où ?Si je vais là,hop,j'ai une page de base.
00:29:52 :Je vais sur l'admin.Hop.Ok,maintenant,quand je vais dans page ici,donc là,c'est la,il m'a fait une page par défaut.Ce qu'on va faire,c'est qu'on va laisser cette page là,la supprimer.
00:30:08 :Voilà.Hop,voilà.Donc,quand je suis sur l'admin ici,sur page,là,on voit que je n'en ai pas.Donc,on va la rajouter une page.
00:30:19 :Qu'est-ce qu'on a ici ?Donc,la home page,c'est le,il ne me propose pas de page,puisque c'est le seul modèle,pour l'instant,page que j'ai.
00:30:27 :Et vous voyez,il me dit ici,le titre de la page.Donc,je ne la pêche pas,donc,home page.Alors ça,je vais l'enlever.
00:30:36 :Hop là.Un rich text field.Et le rich text field,qui est ici,il est hyper puissant,puisque,je peux le dire,je vais mettre du H2.
00:30:48 :Super tip.J'ai envie d'avoir une image,et bien,ce n'est pas grave,on a une galerie d'images déjà faite,ou,on peut aller choisir une imageà transférer,il n'y a pas de problème,genre,une screenshot.
00:31:01 :Voilà.On peut très bien faire ça.Alors quoi,on peut aller mettre des documents,des liens.Vous voyez,liens externes,email,enfin,il y a vraiment plein de choses à faire.
00:31:12 :Donc là,vous voyez que,déjà,l'administration,elle est hyper puissante.Ça va pour l'instant ou pas ?Je suis un peu revenu sur le projet de base,mais c'est juste pour vous montrer un peula tête de l'administration de base.
00:31:22 :OK.Donc là,j'ai une page de base,super titre,salut,voilà,tac.Et ici,vous avez l'onglet promotion.Promotion,ici,ça,c'est le slug de la page.
00:31:39 :Vous avezla balise titre,c'est pour la balise title,en fait,du HTML,et ici,la meta description.Et donc,ça,en fait,on peut tout renseigner sur l'administration,sur chaque page,directement.
00:31:53 :Voilà.On peut enregistrer un brouillon,sauf que la page n'est pas publiée,mais si je reviens là,je vois que j'ai déjà un brouillonqui est enregistré.
00:31:59 :On peut revenir dessuset je la publie,sans aucun problème.Il est quelle heure ?Après, j'ai beaucoup de choses à montrer.Donc là,on a publié une page.
00:32:11 :À savoir qu'avec l'administration Wagtail,vous pouvez gérer plusieurs sites.Là, on va faire ça avec un seul.Donc là,je vais mettre en localhost,le nom du site,ça va être test,choisir une page racine,hop,hop.
00:32:27 :Donc là,j'ai créé un site.Le site va marcher bien.Bon là,il me remet là-dessus,parce que je n'ai pas overrideen plus tout ce qui estHTML.
00:32:42 :Mais sinon,ça c'est la page de baseque vous avez avec Wagtail.Mais sinon,on voit bien que la page icis'appelle test.Voilà.Donc voilà en groscomment vous faites un modèlede page Wagtail.
00:32:55 :Maintenant,on va repartirsur des plus gros projetsoùça sera plus compréhensible.Alors,si je repars là-dessus,si je repars surpeut-être luiqui sera plus sympa.
00:33:08 :Ouais,allez.Mon site perso,c'est parti.Alors mon site perso,mon site perso,il est là.Voilà.Donc déjà,quand vous avez votresur Wagtail,vu que je suis connecté ici,j'ai un petit widget,je ne sais pas si vous le voyez.
00:33:28 :Où je peux directementaller faire un modifié de page,acheter une sous-pageou aller sur administration.Voilà.Et là,je vois tout ce que j'ai modifiéet je vois d'ailleursque je peux faire une mise à joursur Wagtail.
00:33:44 :Sur mon site,du coup,j'ai plusieurs modèles.Donc là,j'ai toujours unj'ai un modèle générique,en fait,un modèle abstraitavec toujours un header.
00:33:58 :Parce que j'ai des headerssur tous mes modèles.Voilà.Avec un modèle legal page,ici,j'ai quoi par exemple ?J'ai à voirle blog.
00:34:08 :Donc ici,comment ça se passe ?J'ai mon V1qui merde,ce n'est pas grave.Il ne me reconnaît pas celui-là.Pourtant,je ne l'ai pas installé.
00:34:18 :Je vais le réinstaller,c'est bizarre.C'est une librairie externe,c'est pour ça.Ce n'est pas inclus à Wagtail.Donc en gros,comment ça se passe ici ?
00:34:25 :Ce n'est pas la plus simpleparce que j'ai les tags.Est-ce que j'en parletout de suite ?Ne faites pas attentionaux champs tags.
00:34:33 :On va commencer.Ici, par exemple,j'ai un modèle blog index pagequi hérite de generic page.Et generic page,c'est un modèle abstraitque j'ai créé.
00:34:42 :On hérite de page.C'est juste qu'il y aun header en riche texte.Ici,j'ai mon header.Ne faites pas attention à ça.Je vous le montre en exemple.
00:34:54 :Je rends mon headerdans l'administrationet on peut redéfinir un contexte.Qu'est-ce que je fais ?En gros, ici,le cas typique de Wagtail.Dans mon contexte,j'ai utilisé une méthode superpour récupérerle contexte de base,on va dire.
00:35:12 :Et ici,je vais récupérer,là, je suis dans l'index du blog,tous les articles de blog.Là, ce que je fais,c'est que je récupèreles blog page.
00:35:26 :A savoir que l'ORM, du coup,il est modifiéparce que c'est vraimentadapté à Wagtail.Ici, je fais un child-of.Child-of, c'est pour direque ce modèle-là,ici,c'est les enfants dece modèle.
00:35:40 :Puisqu'en fait,quand je crée une page de blog,elle va être enfantde ce modèle.Là, du coup,je fais un child-ofde la classe elle-mêmeet point live.
00:35:51 :Si vous avez vu tout à l'heurequand j'ai faitenregistrer le brouillon,en fait,quand vous enregistrez le brouillonque vous ne publiez pas,vous n'êtes pas en point live.
00:36:02 :Point live,c'est vraiment quand vous cliquezsur publier.En gros,c'est pour affichertoutes les pages,les articles de blogqui appartiennentà ce modèle-làet qui sont publiés.
00:36:14 :Voilà.C'est bon ou pas ?Est-ce que ça va ?Dites-moi si vraimentil y a un doute.Et après,je rentre dans la démo.
00:36:27 :Non, ça va.Pour moi, ça va.Je vais rentrerdans la démo du site après.Là, je suis vraiment sur le code.OK.Ensuite,j'ai la page de blogqui hérite de generic page,mais on va dire de page.
00:36:38 :C'est juste qu'il y aun header en plus.Donc ici,j'ai mis une main image ici.J'aurais peut-être pu d'ailleurs…Oui, non, c'est bon.Donc,la page de blog,je vais hériteret je vais utiliserune foreign case imagequi est,en fait,le modèle image de Wagtailde base.
00:37:00 :Vous allez voirun peu comment il marche.Ensuite,je vais avoir une date,un body.Et ensuite,ici,je vais avoirce qu'on appelleun stream field.
00:37:11 :Et le stream field,c'est hyper puissantparce que ça vous permetde pouvoir composervotre appui comme vous voulez.Donc,soit dans mon cas,je n'ai que deux choses,mais dans l'autre site,je vous montrerai,j'ai plus de choses.
00:37:22 :Ici,c'est pour mettre du code.Ici,c'est pour avoirun éditeur de texte.Détails,on les verra plus tard.Ce stream field,c'est quoi ?
00:37:31 :C'est pour,en fait,indexer les champs,donc le header et le body.Ça permet d'indexerces champs-làdans le moteur de recherchede Wagtailqui est déjà tout prêt.
00:37:40 :Et ensuite,ici,mon content panel,c'est,en fait,le panneau d'administration.Je vais rendre mes champs.Donc,par exemple,le header,la dateet la date principale.
00:37:53 :Ici,je fais un multi-feed panel.En fait,c'est pour regrouper tout çaen même temps.Vous allez voir pourquoi.Et ici,je vais avoir,à part le bodyet les tags.
00:38:03 :Donc,si je vais sur mon site,par exemple,ici,je vais aller sur page.Donc,on voit que j'ai la page,la home page qui est ici.
00:38:11 :Si je descends,je vois les pagesqui sont en dessous.Donc,la home page est toujoursla page parente de tout,en fait.Je descends,je vais avoir la partie blog,projet.
00:38:21 :Ici,c'est l'index du blog.Hop.Ou si je vais ici,je vois tous mes articles.Si je fais un petit plus,hop,et bien là,je vais être dans mon modèlequi est blog page ici.
00:38:31 :Donc,là,par exemple,je peux aller écrire,en fait,un article.Donc,le titre,j'ai le header.Donc,ça va être la traduction,la date de publication,vous voyez.
00:38:44 :Et je peux choisir une image.Donc,là,je peux avoir dans ma galeriel'image qui est existante.J'ai plusieurs images.Ou,je peux en transférer une nouvelle.
00:38:52 :Qu'est-ce que je peux faire aussi ?Donc,là,c'est ce qu'on appelaitle stream fieldqu'on a vuici.Le stream field,j'aiun bloc paragraphe,un bloc code.
00:39:03 :Donc,si je fais ça,je choisis paragraphe.Hop.Donc,paragraphe,ça inclut moi les imageset ainsi de suite.Donc,je peux dire,je ne sais pas,un titre,un petit salut.
00:39:16 :Après,je peux dire,je peux mettre un petit code.Donc,je passe à être du Python.Voilà.Donc,hop.Je vais mettre ma listeest égale à liste.
00:39:26 :Voilà.Donc,là,j'ai ma petite prévue avant.Et après,je peux mettre des mots clés.Donc,par exemple,si c'est un article sur Wagtail,je ne sais pas,je vais mettre Wagtail.
00:39:37 :Si c'est sur Python,je mets Python.Ainsi de suite.Quand vous avez un articlecomme ça,donc,ce qu'on va faire,c'est qu'on va,hop,là,on va mettre Python.
00:39:48 :OK.Donc,là,on a vu qu'on pouvait comme çaajouter des pages.Alors,quand vous êtes,par exemple,ici,que vous êtessur le blog,si vous faites un petit plus,si vous avez plusieursmodèles de pages,il va vous proposer,en fait,tous les modèles de pagesque vous avez
00:40:06 :dans votre application.Sauf que,moi,il ne me prendque le modèleBlogPage.Pourquoi ?En fait,quand je suis dansBlogPage,je lui ai définiles modèlesqu'il avait le droitde prendreen modèle enfant.
00:40:21 :Et je lui ai dit,c'est l'applicationBlog.BlogPage.Donc,on est bien dans Bloget BlogPage.Comme ça,automatiquement,il ne laisse pas le choix.Il utilise tout de suitele modèle BlogPage.
00:40:32 :Sauf que,si on regarde bien,donc,on est,donc,là,sur un cas typiqued'une page indexou accueilavec les pages enfants.Si on regarde bien,donc,là,si on regarde bien,je n'ai aucune vue.
00:40:47 :Je n'ai aucune vued'un go de fait.Donc,là,en fait,comment c'est géré ?En fait,c'est Wackelqui gère ça tout seul.Ici,j'ai mes templates.
00:40:58 :Donc,j'ai BlogIndexPageici,qui va être là.Et j'ai BlogPage.Comment ça se passe ?Hop là !Donc,BlogIndexPage ici,si je retourne dessus,voilà,je vais avoir le header,je vais avoir,ben,c'est tout,je n'ai que le header.
00:41:14 :Et je vais avoir aussides cartes,en fait,avec toutes les pages enfants.Donc,si je vais sur mon site,hop,Blog,donc,là,j'ai bien un header.
00:41:25 :Ici,toutes les cartes,en fait,ça va être mes pages enfants,les BlogPage.Donc,là,on est vraiment,c'est les BlogPage.Toute la page ici,qu'on voit ici,c'est la pageIndexPage,le blog.
00:41:39 :Et là,c'est vraimentchaque page,chaque article de blog,chaque article de blog.Comment ça se passe ?Donc,Blog IndexPage,ici,par exemple,je vais aller boucler,pour chaque poste,une BlogPage,j'y vais,donc,si je suis là,excusez-moi,BlogPages,donc,c'est tous mes articles de blog,ici.
00:42:00 :Et bien,je vais aller afficherles informations.Voilà.Donc,ça,je vais reprendre le détail de ça,parce que c'est un peu plus complexeetje m'en sers pas,si je m'en sers quand même souvent.
00:42:11 :Ok,là,déjà,un tag image de prévu,si vous voulez,avec,pour gérer les classes.Voilà.Donc,ils ont déjà,en fait,un tag prévu.
00:42:23 :Là,où c'est intéressant,parce que je voulais vous montrerque c'est intéressant,ici,donc,là,je vais être dans la carte,ici.Et qu'est-ce que j'ai ?
00:42:33 :Ici,donc,j'ai la date de l'article.Ok,pourquoi pas ?Je vais avoir,ici,post.owner,donc,si je clique,ça récupère automatiquementle nom de la personnequi a été créer l'article.
00:42:46 :Voilà.Donc,je n'ai pas besoin de fairepost.Je n'ai pas besoin de prévoirdans les modèles,en fait,un user,un auteur.Ça le fait automatiquement.
00:42:56 :Et pour allercliquer sur chaquepage,ici,j'ai un tagpageURLpost.Et,en fait,ça récupère automatiquementl'URL de la page.Donc,ça,c'est le titrede la page,par exemple.
00:43:13 :Qu'est-ce que j'ai d'autre ?Ici,j'ai le header,donc,vu que c'est un rich text,donc,il faut bien spécifierque c'est un rich text.
00:43:22 :Qu'est-ce que je peux avoird'autre à vous montrerlà-dessus ?Quand j'étais là,quand j'étais ici.Donc,là,j'ai du rich text.Hop là.Ici,j'afficheà...
00:43:34 :Oui,mais non.Non.Est-ce queje vous montreOn verra ça après.Ça,je m'en fiche.C'est la pagination.OK.Donc,pour l'instant,on va rester là-dessus.
00:43:47 :Donc,là,en fait,j'ai bien les cartesavec toutes mes sous-pages.Voilà.Donc,ici,je boucle comme ça.Quand on est surchaque article,ici,donc,là,je fais vraimentun aperçuglobal.
00:44:04 :Quand je suis surchaque article,ici,donc,je peux,comment dire,mettre,par exemple,ici,ça va être lecorps de la page.Hop là.
00:44:16 :Qui va être là.Donc,là,j'ai du code,par exemple.Automatiquement,en fait,c'est rendu.Mes blocs de code,mes blocs de texte,ce que vous voulez,c'est rendu automatiquementjuste avec ça.
00:44:29 :Je n'ai rien fait de plus.J'ai mon imagequi est ici.Et ensuite,j'ai les tags ici.Donc,en fait,c'est prévu aussià mon article.
00:44:38 :Par exemple,je vais,ici,c'est un article sur Python et Django.Donc,je clique sur Django.Hop.J'ai tous les articlesqui ont le tag Djangode mon application.
00:44:48 :Ça,comment ça marche?Alors,c'est pas trop avancé,ça va,c'est pas trop compliquéou,dites-moi.Dites-moi.Donc,jusqu'à là,ça,ça marche quand même.
00:45:01 :OK.Donc,là,j'ai,OK.Et les autres,ça va ou pas?Ou c'est un peu compliqué?OK,Edouard,nickel.OK.Bon,après,c'est l'initiation.Donc,je sais que ça peut être,je suis un peu fort sur l'initiation.
00:45:25 :Après,en fait,je vais faire un exemple completde ce qu'on peut faire.Ce sera plus simple.Et là,je vous parle juste,pour avoir diffusion s'il faut,mais vraiment de ce que j'ai fait.
00:45:34 :Donc,le système de tag,en fait,ici,je l'ai importé.J'ai une applicationqui s'appelletag,ici.J'ai des modèles.Et,en gros,donc ça,j'ai suivi la doc de Wagtail.
00:45:48 :Ils ont déjà des classes de prévues.Et ici,donc,je voulais des tagspour mon,mon application blog,mon site de blog.Et donc,je suis allé,ici,mettre mes tags,ici,par exemple.
00:46:01 :Donc,là,c'est une parentel key,ce qui hérite d'une foreign key de Django.On verra ça après.Et ici,du coup,je vais avoir mon,ma page,en fait,où il y aura tous mes tags.
00:46:14 :Donc,la page qui est là.Donc,comment ça se passe ?Dans mon blog,ici,hop là,chaque article,voilà,ils vont avoir leurs tags.
00:46:24 :Donc,vous voyez,avec,ici,un modèle pour les tags,un modèle pour la page des tags,et je les renseigne dans mon modèle blog,eh bien,j'ai un système de tags qui marche très,très bien.
00:46:40 :Voilà.Ensuite,ce que je voulais voir avec vous,par exemple,sur mon application,je me suis fait un système de,comment dire,hop là,je ne sais pas si je peux le montrer ici,si je mets Django,voilà.
00:47:01 :Je vous montre maintenant le moteur de recherche.Ici,vous voyez,j'utilise le moteur de recherche Wagtail.Donc,il va me rechercher à tous les endroits où j'ai,ici,j'ai le search field,tous les champs que j'ai indexés,en fait,tous les champs de tous les modèles,donc,dans le blog,
00:47:22 :dans eufolio,ici.Hop,donc,dans folio,pareil,j'ai un index page,j'ai indexé ici,je suis où,mais voilà,j'ai indexé le header et le body.
00:47:35 :En fait,s'il trouve Django dans tous ces champs-là,hop,il va me sortir ici toutes mes cartes.Voilà.Donc,en fait,ce que je voulais dire depuis le début,c'est qu'on n'a pas de vue.
00:47:50 :En fait,sur le principe,c'est que vous allez créer à chaque fois votre,ici,par exemple,une page d'index de blog,blog index,et ensuite,vous allez créer vos pages.
00:48:02 :Donc,il n'y a pas besoin de vue,ça va créer tout de suite vos pages.Il n'y a aucune vue à faire.Si jamais,par exemple,vous faites là,comme moi,j'ai,si je vais sur,je vais aller sur mon projet,ici,template de base,ici,tac.
00:48:21 :Alors,moi,le menu,je le gère comme ça,je ne le gère pas dynamiquement.Il est où ?Hop là.Ici,je vais avoir mon menu.
00:48:32 :A savoir que,vous pouvez créer des pages,en fait,quand vous créez vos pages,si je reviens sur mon application,donc là,j'ai une page,on va aller ici,par exemple,hop là.
00:48:47 :Donc,si je veux créer une sous-page à ma home page,donc,qui va être une page au même niveau que blog,projet,et ainsi de suite,je fais plus.
00:48:54 :Donc,ici,j'ai plusieurs,imaginons que je veuille faire,je ne sais pas,une page légale et qu'elle n'existe pas encore,hop,je vais la créer.
00:49:06 :Dans promotion,je vais mettre un slug,je vais l'appeler légal.Et en fait,dans mon menu,moi,de mon base.html,j'ai déjà prévu,je ne sais pas si je l'ai ici,search dashboard,machin,est-ce que je l'appelle légal page ou pas ?
00:49:21 :Voilà.Vous avez un tag avec Wagtail qui s'appelle le slug URL.Vous mettez ici le nom du slug,et automatiquement,ça va aller chercher la page qui a le slug ici.
00:49:35 :Voilà.Donc ça,c'est vraiment très,très bien foutu.Ensuite,ensuite,ensuite,ce que je voulais montrer,hop là,on est là,hop là,c'est qu'il est possible de se faire des modèles de pages ici.
00:49:55 :Donc par exemple,si je vais dans contacts,modèles,donc là,je me suis fait un,comment dire,un constructeur de formulaire.Ici,donc là,c'est intéressant.
00:50:11 :On a une parentale K.Donc une parentale K,ça hérite de foreign K.Quelle différence ?Je vais aller,par exemple,je vais faire semblant d'aller me créer un formulaire.
00:50:20 :Vous allez comprendre,ici,je suis là,je fais un petit plus,je vais faire une form page.Donc là,je vais aller créer un formulaire.
00:50:28 :Et en fait,vous pouvez vous créer un formulaire maison,directement pour l'administration Backtail.Donc par exemple,ici,je vais avoir le titre du formulaire,le texte de remerciement,voilà,je vais mettre mon email,ainsi de suite.
00:50:41 :A savoir que vous pouvez rajouter des form field ici.Donc,je rajoute un form,je ne sais pas,je vais l'appeler mon champ,ainsi de suite,un texte d'aide.
00:50:50 :Est-ce qu'il est requis ?Type de champ,je ne sais pas,un email,ainsi de suite.Vous voyez,il y a le choix.Hop,ensuite,je veux un deuxième champ,voilà,un troisième champ,ainsi de suite.
00:51:03 :Imaginez,vous vous dites que ce champ-là,en fait,si vous le voulez en deuxième position,eh bien,on peut le remonter,ici,boum,on peut échanger,en fait,la position des éléments.
00:51:14 :En fait,ici,on est dans des For NK améliorés,dans le sens où c'est une relation,ici,en For NK,sauf que c'est en Parental K.
00:51:21 :Avec Django,quand vous avez une For NK dans un modèle,il faut déjà que la For NK,elle existe.Il faut déjà aller la créer.
00:51:29 :Avec Wagtail,vous pouvez créer tout d'un coup.Donc,on a vraiment une relation parent-enfant.Avec Django,il aurait fallu,ici,avoir des champs déjà créés d'avance,par exemple.
00:51:39 :Hop,et les intégrer ensuite.Que là,vous créez tout d'un coup.Vous créez la page elle-même,et en plus,vous créez tous les champs à la volée.
00:51:46 :Donc,le modèle qui est ici,hop là.Donc,notre ici,avec le RelatedNames,ici,FormFields,on le retrouve là.On l'intègre dans l'illustration de la page,et vous allez pouvoir créer à la voléeautant de FormFields que vous voulez.
00:52:04 :Vous allez les créer.Et donc,ils n'ont pas besoin d'exister avantla création,en fait.Ils ne doivent pas être créés avant cette page-là.Tout est créé en un seul bloc,ici.
00:52:16 :Voilà.Voilà la grande différence,c'est que la 4NK est de Django.Maintenant,je vais vous montrerun cas,un cas,un cas,intéressant.Alors,bien sûr,rien ne vous empêche,rien ne vous empêche,ici,j'ai une application qui est full,qui est full Django.
00:52:42 :OK.Rien ne vous empêche de mélanger les deux.Il faut avoir des vues Django.Après avoir des modèles de page Wagtail,il n'y a aucun problème.
00:52:49 :Si je pars,par exemple,maintenant,sur l'application,ici,11 emprunts.Voilà.Hop là.Je vous la montre tout de suite.Donc,une application qui est d'une commune,ici,voilà.
00:53:10 :Donc,ils ont des pages.Voilà.Donc,par exemple,ici,vous allez voir la page La Mairie.Donc,la page La Mairie,ici,imaginez qu'elle n'appelait pas un conseiller.
00:53:21 :Et bien,ce qu'il fait,il va,hop,ici,il modifie cette page.Hop,il peut directement aller modifier la page d'administration.Donc là,on va rentrer dans le sujet au niveau des,au niveau des,des fonctionnalités.
00:53:33 :Donc là,on était sur modifier une page.Ensuite,imaginez,dans l'actualité événement,actualité,hop.Donc,c'est un peu le principe du blog de tout à l'heure.
00:53:42 :J'ai ma page d'index.Ici,j'ai des sous-pages.Donc,ici,j'ai la page articles index.Et ici,tous les articles les mêmes.Hop,je clique.Je suis sur les articles.
00:53:53 :Hop,voilà.Donc,je suis dessus.Je fais retour,et je reviens à la page d'index.Et quand je suis sur les articles,par exemple,je vous montre ça tout de suite.
00:54:02 :News,Template,hop là.Quand vous êtes là,vu que les pages articles,ici,sont des pages,enfants,du,de la page,de la page,de la page,d'index,en fait,des news.
00:54:18 :Quand vous êtes là,c'est une page enfant,de la page index des news.Il y a,avec quoi que tel,il y a une,ce qui est vachement intéressant,c'est que vous pouvez faire un page,.get,
00:54:27 :parent,.url.Donc,en fait,quand vous êtes là,je reviens,donc là,les pages enfants de l'index,ici,je récupère,je peux récupérer le parent,et bien,je reviens du coup à l'index,vu que le parent,c'est l'index.
00:54:42 :Si je vais,par exemple,ici,sur,je ne sais pas,sur,la mairie,compte rendu des conseils municipaux.Hop.Ici,ce n'est pas des pages,en fait,ça va être directement des fichiers PDF.
00:54:55 :Hop.Donc là,je n'ai pas besoin de créer des pages.Ici,c'est juste des modèles Djangoque j'ai intégrésdans un page Wagtail.Je vous montre ça,après,je vais vous montrer un petit peu de code,et après,je ne vous embête plus.
00:55:07 :Si je veux faire l'administration,si je veux faire l'administration,sur administration,par exemple,maintenant que je suis ici,là,je vois tout ce que j'ai modifié récemment.
00:55:20 :Imaginez que je veux,par exemple,ici,si je voulais rajouter une actualité.Donc,actualité,je vais là.Donc,comme tout à l'heure,je peux dire,allez,hop,je fais une nouvelle actualité,boum,l'actualité,je mets le nom,on teste,la duplication,et eux,c'est pareil,je leur ai fait un stream field.
00:55:43 :Donc,là,ils peuvent très bien avoir du texte.Donc,toujours en mode riche.Hop,donc là,test,après,je peux dire,ils veulent une image,et bien,ils vont leur mettre une image.
00:55:56 :Donc,on prend une image existante.Hop,ils veulent un document,et bien,on va choisir un document existant.Donc,ici,j'ai un PDF,par exemple,c'est un bitable,et ainsi de suite.
00:56:08 :On enregistre le brouillon.Donc,si je reviens là,la personne qui a enregistré le brouillon,elle le voit,il est en brouillon.Elle revient dessus.
00:56:15 :Et ici,quand on regarde à droite,hop,on peut avoir différentes choses,différentes informations.Donc,on a un peu le contenu de la page.On peut voir,on peut programmer l'application.
00:56:24 :Voilà,on peut se dire,visualiser la page.Donc,là,il peut voir à quoi elle ressemble.Donc,là,par exemple,si je clique,si je suis ici,hop,il peut se dire,la page,elle va ressembler à ça.
00:56:39 :Donc,il peut voir ce qui a été,en fait,le métric de contenu,il appelle ça,le nombre de mots,ainsi de suite.Et,ce qui peut être très bien,c'est quand vous êtes plusieurset qu'il y en a quelque chose,je ne sais pas,je mets un texte,
00:56:52 :donc là,mon texte,et vous voulez que quelqu'un vérifie,parce que vous n'êtes pas sûr de vous,on peut très bien dire,on va mettre un commentaire,vérification SVP,parce que je ne suis pas sûr,hop,vérification SVP,parce que je ne suis pas sûr,hop,j'enregistre,et la personne qui vient se connecter,
00:57:06 :qui travaille avec vous,elle peut venir voir,puis elle dit,tiens,lui,il a mis un commentaire,ah,ben,il l'a mis ici,et ben,on peut répondre,en fait,on peut aller répondre,en fait,à la personne.
00:57:21 :Voilà.Donc,vous voyez qu'en fait,l'interface,elle est hyper riche,on peut faire plein de choses.Donc,là,le,bon,le,je ne vais pas le publier,autre chose,euh,donc,là,on a accès,du coup,dans le menu,à toutes les imagesqu'on a mis,voilà,à tous les documents
00:57:44 :qu'on a mis,donc,là,c'est toutes les pagesdu site,hein,à savoir aussi qu'on a,par exemple,si je reviens ici,hop là,si je reviens ici,je parlais des comptesrendus de conseils municipaux,par exemple,ici,vous avez donc,la page,donc,qui hérite de page,ici,
00:58:04 :pour les,les conseils municipaux,donc,on a un body,un sex file,ainsi de suite,et dans mon contexte,en fait,je vais aller chercher,ici,un modèlequi s'appelleconcile meeting,donc,c'est les comptes rendusde conseils municipaux,ici,j'hérite bien le modèlesur le modèle,donc,c'est bien un modèle
00:58:25 :Django,que j'intègre dans le contextede mon modèleWagtail,ok,donc,c'est ce que je vous montrais,ici,c'est que,du coup,les comptes rendus,ici,là,c'est des modèlesDjango,donc,il faut très bieninteragir,en fait,entre vos modèlesWagtail et Django,les faire interagir ensemble,mettre du Django
00:58:48 :dans le Wagtail,par exemple,ici,donc,mon modèleDjango,je veux dire,on voit le document,ici,j'utilise en foreign key,le,le modèle documentdu Wagtail,ce qui me permet,du coup,ce qui me permet,du coup,quand je suis dansl'illustration,d'accéder,ici,quand je suis dans
00:59:10 :mon modèle,des,comment dire,des comptes rendus,d'accéder,en fait,au modèleWagtail,au niveau des documents,j'ai accès à tousles documents de Wagtail,donc,on peut très bienfaire ça,et donc,je vais interagir dans monmodèle,en fait,Wagtail,sans problème,euh,donc,là,on peut faire ça,
00:59:34 :encore mieux,alors,le problème,c'est que si vous,si vous n'enregistrez pas de,ah,j'ai pas vu qu'il y avaitdu chat,ah non,c'est bon,c'est du salut,c'est là,c'est que si vous n'enregistrezpas de,comment dire,que vous créez un modèleDjango,il apparaîtra pas dans
00:59:52 :l'illustration Wagtailde base,il est possibled'intégrer dans votreillustration Wagtail,c'est ce qu'on fait.Moi,je me fais une applicationà part,Hoox,qui me sert juste à avoirun,limite,un fichier,ici,Wagtail Hoox,et en fait,ici,je vais aller cherchermon,euh,mon modèle ordinance,
01:00:14 :donc ça,c'est les arrêtés municipaux,qui est un modèle Wagtail,ici,c'est les comptes rendusde conseils municipaux,et j'élite de la classede Wagtail,c'est un Ipad Viewset,et donc,ici,par exemple,je vais définir un icône,je vais vous montrercomment ça marche,un icône,après,je mets un menu label,
01:00:33 :un list display,comme on peut faire à Django,donc le titre,la date,les champs,en fait,de mon modèle,avec un list filter,c'est tout à fait possible aussi,voilà.
01:00:43 :Et ensuite,on peut faire unSnipet Viewset Group,qui est ici,et ici,je vais aller intégrermes deux classesque j'ai au-dessus,ce qui fait que maintenant,ici,je vais pouvoirutiliserle menuici,si je vaislà,j'ai un menuavec marquéarrêté,compte rendu,et bien,
01:01:04 :c'est bien celui-là,arrêté,compte rendu,qui contientles arrêtéset les comptes rendus,qui sont arrêtéset,enfin,réunion de conseils,c'est pareil,compte rendu.
01:01:16 :Ici,il n'y a plus d'icônes,donc en fait,Wagtail Icons,si vous allez là,vous descendez,hop,et vous avez une listede Wagtail,donc là,par exemple,j'ai Calendar Check,Circle Check,et ainsi de suite,et en fait,vous les renseignezen chaîne de caractère,donc par exemple,
01:01:34 :ici,pour le menu principal,j'ai misun icône groupe,donc l'icône groupequi va être ici,le plus,pour les comptes rendus,j'ai misun Dock Full,et bien,le Dock Full,il est ici,vous voyez,et comme ça,maintenant,je peux aller gérermes modèles Djangodans Wagtail,
01:01:53 :hop,donc je mets une date,hop,donc j'ai accès à Wagtail,comme je vous l'ai montré,et donc là,j'ai créé,en fait,si je fais enregistrer,j'ai une instanced'un modèle Django.
01:02:06 :Alors,voilà un peupour tout ce qui est pageset modèles Django,ainsi de suite,on va finir surles workflowset les paramètres.Collection,on ne va pas avoir ça,c'est un utilisateur,donc là,moi,je suis admin,du coup,je peux gérer l'utilisateur.
01:02:26 :L'utilisateur,si je veux en créer un,par exemple,moi,j'ai un compte test,ajouter un utilisateur,hop,donc je vais lui mettreun email,un prénom,un nom,un mot de passe,ainsi de suite,et on peut définir un rôle,donc il suffitd'administraseur,donc moi,je n'ai pas forcément envie,
01:02:44 :et en fait,j'ai créé un rôleconseiller municipal.Alors,comment ça marcheles rôles avec Wagtail ?Hop,comment ça marche ?Si je vais,par exemple,sur,allez,modérateur.
01:02:58 :Donc,on peut créer des rôles,en fait,sur les menus Django,aussi,pas de problème,mais surtout,sur les pages,sur les pages Wagtail,donc là,c'est toutes les pages Wagtail.
01:03:09 :Donc,par exemple,j'ai dit que sur le route,un administrateur,lui,il peut ajouter,modifier,verrouiller,enfin,faire ce qu'il veut.Si je reviens plutôtconseiller,voilà,donc,il a certains droits sur les modèles Django,mais il n'a pas tous les droitssur les pages,parce qu'en fait,quand vous faites un,
01:03:31 :comment dire,ça fonctionne en cascade.Imaginez,vous mettez un rôle ici,si je reviens là,vous mettez un rôlesur la page commune,en vrai,il va aller en cascadesur toutes les autres pages.
01:03:44 :Donc,par exemple,si vous mettez,vous pouvez mettre un rôle différent ici,un rôle différent ici,ici,il aura le droit d'ajouter,mais ici,il a juste le droit de modifier.
01:03:53 :Et en fait,ça va aller en cascadesur les sous-pages des articles.Moi,je leur ai fait un rôleoù les conseillers,selon les pages,ici,ils ne peuvent,par exemple,que modifier la page de,ça doit être ma home page,je crois,ils ne peuvent que la modifier.
01:04:07 :Par contre,actualité,ils peuvent modifier,ajouter,publier,voilà.Et pareil pour les événements,ils peuvent ajouter,modifier,et ainsi de suite.Mais je ne veux surtout pasqu'il y ait une pagepour les sitesqui me la supprimeou qui m'en rajoute,donc,ils peuvent juste la modifier.
01:04:24 :Et pareil pour les documents,en fait,vous pouvez mettre sur les documents,donc,créer des collections,mais ça,je ne vais pas en parler.En gros,vous pouvez dire,les documents,ils peuvent en ajouter,modifier,choisir,ainsi de suite.
01:04:38 :Je ne passe pas trop le temps là-dessus,mais vous voyez qu'il est possiblede faire beaucoup de chosesau niveau des permissionset gérer granulairement,en fait,au niveau des pageset de l'arborescence,dire,et à ce niveau-là,faire autre chose.
01:04:50 :Qu'est-ce que j'allais dire ?Pour terminer,le système de workflow,je vais vous montrer ça,utilisateur.Je vais vous montrer sur mon site,je vais pas faire de bêtisessur leur site à eux.
01:05:04 :Donc là,si je vais sur mon site,tac,il y a qui sur mon site utilisateur ?OK.Donc sur mon site,il y a Gabriel Trouvé Test,qui s'appelle Gab Test.
01:05:17 :J'espère que j'ai mis le même mot de passe.Imaginez,je vais me connecter avec Gab Test.Hop là,c'est Gab Test.Non,c'est pas ce que je voulais faire.
01:05:28 :Gab Test.Et lui,il est juste,dans les rôles,vous avez vu qu'il y avaitadministrateur et modérateur.Lui,il est modérateur,du coup,il n'a pas les mêmes rôles.
01:05:40 :Donc,par exemple,si je vais ici,je vais lui ajouterun article de blog.Donc,je fais test article.Hop.Super article.Une date.Choisir une image.
01:05:55 :Ah oui,je n'ai pas donné accès à mes imagesà ce rôle-là.Ce n'est pas grave.Je me disais bien,il faudrait que je lui fie l'accès.
01:06:06 :Hop.On va en transférer une nouvelle,ce n'est pas très grave.Hop.Le body,je vais mettre unexemple de test ici.Et en mot clé,je vais mettre un test,je ne sais pas,Python,qui existe déjà.
01:06:18 :OK.Donc là,vous voyez qu'en fait,la personne qui,ici,je n'ai pas le rôlede modérateur.Du coup,je ne peux pas publier.Je peux juste enregistrer le brouillon.
01:06:28 :Ou je peux soumettre,soumettre à modération.S'il veut bien,cliquer.Voilà.J'ai déjà soumissans faire exprès peut-être.Voilà,oui,je l'ai fait sans faire exprès.
01:06:38 :Donc,en fait,j'ai déjà soumis à modération.Donc,maintenant,si je vais ici,si je vais ici,OK,ce n'est pas grave.Si je vais ici,je vois que j'ai un workflowqui a été déclenché.
01:06:50 :Il me l'a mis en deux fois,d'ailleurs.Donc,si je retourne là,si je veux,j'ai cliqué trois fois dessus,en fait,hop là,avec mon compte administrateur,hop,je vois que j'aien attente de vérification,bon,du coup,je l'écris en deux fois,en attente de vérification,j'ai cliqué trois fois dessus,
01:07:07 :en fait,hop là,avec mon compte administrateur,hop,en attente de vérification,j'ai deux workflows.Alors,comment ça se passe ?Et en fait,vous avez ici un workflow.
01:07:17 :Donc,en fait,vous avez toujoursles personnes,en fait,qui,comment dire,je vais retourner sur la pagede task workflow,peut-être,hop là,voilà,il faut définir un workflow,en fait,donc là où les éditeurs,en fait,eux,ils vont devoir demanderau modérateur,en fait,d'approuver l'application.
01:07:39 :Donc,là,il y a quelque chose.Si je vais ici,en tant qu'administrateur,je vois que la personneelle a écrit ça,ok,pas de problème,et bien,je peux lui dire,demander des modifications,approuver,publier,je publie l'article,approuver un commentaire,publier,ou je peux publier directement,mais je peux dire,
01:07:58 :ben écoute,hop,je lui dis,ben,va modifier,modifier,telle partie,par exemple,enfin,ainsi de suite,vous voyez,dernière petite chose intéressante,alors,il y a trop de choses à voir,en fait,mais du coup,je ne vais pas tout faire pour vous voir,sur une page,imaginez que je suis sur cette page,
01:08:18 :une page de,je vais aller sur une page d'articles,par exemple,donc,j'ai mon blog,voilà,ici,je vais aller voir l'historique,vous pouvez facilement voir sur une pagetout ce qui a été fait,donc,on voit que celle-là,j'ai galéré à l'écrire,j'ai dû faire plusieurs brouillons,hop,
01:08:33 :voilà,et là,il y a une page,il y a une page,il y a une page,voilà,et on sait quand je l'ai publiée,et quand je l'ai remodifiée,et quand je l'ai republiée,et on peut voir ici,dans quel état il était à l'époque,passer en revue,
01:08:48 :comparer avec une autre version,comparer avec les versions actuelles,en fait,vous pouvez voir,vous avez vraiment un versionnage,en gros,de vos pages,et voir tout ce qui a été fait et par qui,il y a tout qui est tracé,en fait,pareil pour le formulaire que j'ai fait maison,
01:09:04 :alors,je ne vais pas vous le montrer,parce que du coup,c'est les adresse mail qui vont apparaître,mais mon formulaire,moi,qui est ici,si je clique dessus,et bien,je vais voir qui m'a contacté,et ainsi de suite,et je peux tout exprire sur un format Excel,
01:09:16 :et ainsi de suite,donc,voilà,en fait,j'ai voulu montrer du coup,beaucoup de choses,mais en fait,vous avez vraiment un CMS maison,vraiment à votre image,vous faites ce que vous voulez avec,je suis désolé,ouais,22h15,en fait,il m'aurait fallu,je pense,trois heures,si je voulais vraiment coder,
01:09:34 :il y avait quelques choses,coder,il y avait le plus lentement,là,on a vu beaucoup de choses,est-ce que ça va quand même,ou est-ce que c'était trop long,trop compliqué,ou pas,ou est-ce que ça va,ou c'est trop flou,s'il y a des points,on peut revenir dessus,
01:09:47 :il n'y a pas de problème,dites-moi,non,ça va,c'est pour le début,donc c'est bon,pour l'instant,bon,ok,et pour du coup,pour le,ce qu'on a vu pour l'instant,ça va,il y a beaucoup de choses,mais,t'as réussi à voir un peuce qu'on peut faire avec,
01:10:04 :quoi.Oui,de toute façon,là,après,je le reprends la prochaine fois,donc,en mode,et après,je vais faire un projettout seul,en fait.
01:10:16 :Ouais,t'as raison,c'est ce qu'il y a de mieux.Merci,Edouard,c'est très clair,tu m'as dit,bah,cool,parce que,je suis désolé,je me suis un peu emballé,en fait,il y a trop de choses à montrer,je,il y a vraiment plein,plein de choses.
01:10:33 :Euh,tous les systèmes de promotionqu'on peut mettre en place,en fait,on peut mettre un systèmede recherche en place,quand il y a une recherchequi est faite,ça met,en fait,des liens en promotion,entre guillemets,enfin,c'est un truc de fou,c'est vraiment un truc de fou,
01:10:48 :en fait,Wagtail.Euh,donc,ok,donc,sinon,pour les modèles de base,n'oubliez pas,par exemple,si je suis dans événements,ici,je n'ai pas d'instance,parce que c'est l'index,donc,il n'y en aura qu'une seule,donc,on peut faire un max count,ici,en sous-page,il n'y aura que la event page,
01:11:09 :page qui est ici,voilà,et donc,je n'ai pas de vue,tout est géré directementpar Wagtail.Dès que je vais créer,en fait,une,merci,dès que je vais créer,en fait,une page d'administration,elle sera,euh,Wagtail va être capablede la rendre,entre guillemets,on pourra cliquer dessus,
01:11:28 :voilà,et donc,c'est ça,avec les méthodes serve et tout,mais ça,c'est encore autre chose,euh,je l'ai déjà fait pour intégrer du,un système de commentaires,mais les commentaires,c'était un modèle Django,et je les intégrais,en fait,avec le modèle serve,en fait,de ma,de page,
01:11:45 :quoi,enfin,c'est,il y a beaucoup,beaucoup,beaucoup de choses à faire,et quand on regarde dans le,dans l'héritage,il y a énormément de choses.
01:11:54 :Euh,donc,voilà,donc,moi,perso,là,en gros,maintenant,je,je suis tranquille,quoi,j'ai,pour mes articles et tout,j'ai plus qu'à aller dire,allez,je vais me faire un article de blog,je clique sur blog,je vois tous les articles,si je veux modifier la page index du blog,
01:12:14 :je fais modifier,sinon,je fais,euh,ajouter,hop,j'écris mon article,si je ne l'ai pas fini,j'enregistre,ainsi de suite,quoi,et donc,c'est ce que j'ai fait pour la commune,bah,merci.
01:12:30 :De rien.C'est bon pour nous,du coup ?Ah,Edouard.Ah,c'est important,merci.OK,pas de soucis.Alors,Edouard,non,je ne travaille pas qu'avec Wagtail,parce que,il n'y a pas longtemps,pourquoi j'ai fait ça,j'ai fait du,euh,si,si,Django,Django,si,je m'en sers encore,
01:12:55 :si vraiment,je peux faire du pur Django,mais dès qu'il y a un peu de publication,je peux dire que je pars directement du Wagtail,euh,et juste,juste,quand on est dans,euh,dans l'application de projet,je gère,en fait,ici,alors,ça c'est quand on est en production,
01:13:12 :quand je suis en production,euh,je vais aller pointer,en fait,vers le,je ne peux pas montrer mon fichier,parce que sinon je dévoile tout,ici,je vais aller pointer vers,euh,comment dire,vers la bonne config des settings,par exemple,dans,ici,dans mon point Anv,ça va faire,
01:13:29 :ça va pointer vers le dev,mais sur mon VPS,ici,dans mon Anv,ça va pointer vers le production.Donc,c'est juste que ça que je voulais montrer pour finir.
01:13:36 :Dans mon base,ici,moi,je n'ai pas le,je ne vais pas avoir,par exemple,le,comment dire,euh,il est où,la,ah,la base de données,voilà,parce que la base de données,moi,elle est gérée indépendamment,différemment,donc,sur mon production,je vais être sur le,
01:13:57 :sur du MySQL,voilà.Et donc,c'est pour ça que je pointe différemment,euh,ici,avec mon WGI,en fait,sur,selon mon environnement,je vais pointer sur un fichier de settings différemment.
01:14:08 :Mais,il ne faut pas oublier de le faire,du coup,pour le manage.Il faut aller pointer vers le bon fichier de settings,parce que,sinon,euh,si vous êtes un python-manage.py,
01:14:17 :sur RoadEPS,euh,il va,que vous pointez vers le fichier de dev,euh,donc,pointez à chaque fois vers les bons modules,quoi.Donc,voilà,excusez-moi,c'était juste le petit mot de la fin.
01:14:30 :Euh,et donc,voilà,vous pouvez le voir,je pense que j'ai répondu à tes questions,j'utilise du Wagtail,dès qu'il y a de la publication,je prends ça,parce que les gens sont assez fans,en général,en fait,puis ils ont une administration qui est vraiment géniale,qui est claire,
01:14:43 :qui est fluide,c'est top.Euh,est-ce qu'il y a d'autres questions,ou pas ?Non.Non,c'est bon.Ok.Eh ben,en tout cas,merci à vous,et je me rends compte que,voilà,en fait,j'avais beaucoup de choses à voir,et du coup,je suis allé vite,et que,
01:15:03 :ça pouvait paraître un peu fouillis par moment,mais,euh,j'espère que vous avez vu un peu,quand même,ce qu'on pouvait se faire avec Wagtail,que c'est,c'est vraiment génial,quoi.
01:15:12 :Et,s'il y a besoin,après,je suis prêt à refaire un,comment dire,un,un mentorat à part,mais,alors,juste pour info,si jamais vous voulez,le reprendre,alors,j'ai une vidéo,j'ai fait une vidéo,je vais vous la montrer maintenant,euh,le lien,alors,on voit qu'il écoute du métal,
01:15:32 :euh,à l'hopla,tac.J'ai une vidéo,est-ce que je peux aller sur ma chaîne,comment on fait déjà,avec YouTube,euh,je vais,aller là-dessus,une vidéo,euh,sur,sur,sur,sur,sur,une vidéo qui est là,elle est où ?
01:15:51 :Euh,oui,ici.Alors,elle date un petit peu,elle date d'il y a,un an,maintenant.Mais,en gros,les mes,c'est en fait,je passe trois heures dessus,et je code en live,en fait,une application Backtail,euh,si ça vous intéresse,je vous mets le lien,hopla.
Aucune occurrence trouvée pour « ».