Wagtail pour les débutants | Kalob Taulien | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Wagtail pour les débutants

teacher avatar Kalob Taulien, Web Development Teacher

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction au Wagtail pour les débutants

      1:37

    • 2.

      Qu'est-

      2:09

    • 3.

      Comment installer Wagtail

      10:49

    • 4.

      Pour commencer

      3:26

    • 5.

      Connectez-vous à l'administrateur

      2:17

    • 6.

      Présentation Wagtail

      10:28

    • 7.

      Édition de la page d'accueil

      23:20

    • 8.

      Travailler avec le modèle de base

      7:06

    • 9.

      App et pages Services

      20:19

    • 10.

      Page Service

      11:42

    • 11.

      Page de liste du service

      14:19

    • 12.

      Ajouter la valorisation de page

      7:36

    • 13.

      Ajouter un en-tête et un pied de

      7:32

    • 14.

      Ajouter des outils de débogage

      15:47

    • 15.

      Page Flex/Misc

      6:37

    • 16.

      Objets témoignage

      16:13

    • 17.

      Bienvenue dans StreamFields

      5:52

    • 18.

      Créer l'application StreamField

      3:05

    • 19.

      Votre premier champ

      13:48

    • 20.

      Références de StreamFields

      12:55

    • 21.

      Simplification des flux répétitifs

      18:29

    • 22.

      Logic en StreamField

      9:12

    • 23.

      Bloc de texte

      12:50

    • 24.

      Bloc radio

      4:30

    • 25.

      Blocage d'appel à l'action

      5:37

    • 26.

      Testimonies et échantillons

      9:51

    • 27.

      StreamField

      11:21

    • 28.

      RichText StreamField

      15:27

    • 29.

      StreamField

      6:18

    • 30.

      Validation du flux en ligne

      9:53

    • 31.

      Limitation des pages

      11:44

    • 32.

      Menus de navigation

      17:47

    • 33.

      Modèles de menu navigation

      16:09

    • 34.

      Formulaires de contact partie 1

      19:38

    • 35.

      Formulaires de contact partie 2

      9:57

    • 36.

      Limiter les choix du formulaire de contact

      4:55

    • 37.

      Support image .webp

      2:49

    • 38.

      Autres façons d'apprendre Wagtail

      10:47

    • 39.

      Paramètres du site global

      14:29

    • 40.

      Modifier le logo Admin de Wagtail

      2:38

    • 41.

      Ajouter des Caching

      15:14

    • 42.

      Caching de la navigation et pied

      12:08

    • 43.

      Ajouter un plan Sitemap

      2:37

    • 44.

      Préparation pour le lancement

      7:08

    • 45.

      Lancement site Web !

      38:33

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

287

apprenants

--

projets

À propos de ce cours

Bienvenue dans Wagtail pour les débutants !

Ce cours est conçu pour les développeurs qui sont novice dans Wagtail CMS. Nous allons créer ensemble un nouveau site Web Wagtail nous allons vous fera part de rien, et nous allons à la fin le déployer sur le web. Voici un aperçu du site Web final : Rocketman

Remarque : Ce cours suppose que vous n'avez pas une compréhension de base de Python. Si vous connaissez quelques Django, c'est génial, mais pas obligatoire.

Si vous n'êtes pas sûr ce cours est non, pensez à les sujets suivants que nous parlerons ensemble. Si vous n'êtes pas familière ou ce cours est probablement ce cours. Voici ce que nous allons apprendre :

  • Installation
    • Vous apprendrez à installer Wagtail à l'aide de venv et Pipenv
  • Créer 7 créations personnalisées
    • Y compris des services, des pages services, des témoignages, StreamFields, un menu personnalisé, des pages de contact et des paramètres du site global
  • Pages de contact
    • Créer la page initiale et la page d'accueil
    • Personnalisation des options du formulaire de contact
  • StreamFields
    • StreamFields de base
    • Références de StreamFields
    • Validation personnalisée
    • Blocs de table
    • Réutilisant des composants StreamField
    • Ajouter une logique supplémentaire à StreamFields
    • 2 façons de créer StreamFields
  • Pages personnalisées
    • Validation de page
    • Champs de page personnalisée
    • Travailler avec des images et des touches étrangères à d'autres modèles
  • Créer des pages d'inscription pour remplir automatiquement votre contenu dès que vous créez une nouvelle page
  • Caching
    • Comment accélérer votre site Web avec la cache.
    • Comment supprimer la cache lorsque vous enregistrez une page ou un modèle
  • Créer un menu personnalisé
    • Vous créerez un système de menu divisable à partir de rien.
    • Vous allez vous présenter dans des tableaux personnalisables et des modèles groupables
    • Enregistrez le menu avec le modèle Wagtails Admin
    • Créer une étiquette personnalisée pour travailler avec vos modèles de menu
  • Créer des modèles Django
    • Utilisez Wagtail comme interface l'administrateur principale
    • Comment transformer des modèles Django en éléments réutilisables (snippets Wagtail snippets)
  • Créer des paramètres de site personnalisé
    • Vous ferez des paramètres du site globalement accessible
    • Cache ces paramètres
    • et supprimez cache lorsque les valeurs sont mises
  • Reclement d'image et renditions personnalisées
    • Et soutien d'image .webp
  • Créer une carte du site
  • 2 outils de debugging très utiles
  • Mes méthodes personnelles pour apprendre rapidement et efficacement Wagtail Mes méthodes
  • Lancez votre site site Web sur un nouveau serveur
    • Utiliser l'océan numérique et l'Ubuntu 18 avec Nginx et Gunicorn
  • Installez un service de surveillance des erreurs pour votre site Web en direct

Et voici quelques bonus avec ce cours :

  • Tout le code source
  • The créer des outils pour personnaliser le thème
  • Une configuration nginx
  • Échantillon de fichiers gunicorn

Si vous pensez qu'il vous pourrait bénéficier d'un cours comme cela, inscrivez-vous certainement aujourd-hui et commencer.

(Aperçu du site Web nous allons créer)

Rencontrez votre enseignant·e

Teacher Profile Image

Kalob Taulien

Web Development Teacher

Enseignant·e

Hi everybody! I'm Kalob Taulien.

 

Here's the TL;DR (short) version about me:

I have been coding since 1999 and teaching people how to code since 2013 I have over 350,000 web development students world-wide I'm on the Wagtail CMS core development team (Wagtail is Python's #1 most popular website making system) I try my best to answer EVERY question my students have  I love teaching — it's definitely one of my natural talents  Also I love goats! (Great conversation starter with me if we ever get to meet in person)

Below you can find all my Skillshare courses. The categories go from easiest to hardest, except for the Misc. Coding Courses at the very end. 

If you're brand new to coding, start with BEGINNERS WEB DEV.&nb... Voir le profil complet

Compétences associées

Développement Développement Web
Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction au Wagtail pour les débutants: Bonjour et bienvenue à wag Tail pour débutants. m'appelle Caleb disant que je vais être votre instructeur. Je serai la voix derrière la vidéo. Je suis aussi membre du Corps Wag Tail Team. Et dans ce cours, nous allons créer un site complet Wag Tail à partir de zéro. Maintenant, ce cours peut être ou non pour vous. Nous allons couvrir beaucoup de choses différentes dans ce cours, mais si vous êtes déjà un développeur de queue de wag avancé, ce cours ne sera probablement pas pour vous. Mais voici quelques-unes des choses que nous allons apprendre. Dans ce cours, nous allons apprendre comment installer Wag Tail avec deux environnements virtuels différents va créer différentes pages de queue de wag, va gérer les modèles ajoutera des données au contexte de modèle. Donc, si vous ne savez pas ce que cela signifie, bien sûr, c'est pour vous. Nous allons ajouter et créer gérer plusieurs types de champs de flux différents va créer un modèle jangle personnalisé, puis permettre wag tail de le modifier. Utilisez-le, permettez-lui de réutiliser les données partout. Dans une chose appelée un extrait, nous allons créer une liste et les pages détaillées vont même créer un formulaire de contact qui peut envoyer un e-mail. Ensuite, nous aborderons des choses comme les paramètres globaux du site, la gestion de la page, page de hiérarchie et la validation des champs de flux. Et puis je vais vous dire quelques conseils et astuces sur les façons dont vous pouvez apprendre Wag Tail plus rapidement et plus facilement et dans une affaire plus ludique fonctionnera avec des images et des formats d'image différents. Et puis nous parlerons d'accélérer votre site web avec une forme très simple d'encaissement. Une fois que nous aurons fait tout cela, nous allons déployer ce site Web sur Internet. Donc, si vous pensez que vous bénéficieriez d'un cours comme celui-ci, n'hésitez pas à entrer et nous pouvons commencer tout de suite. 2. Qu'est-: Quelle est la façon rectale est pythons numéro un système de gestion de contenu le plus populaire. des chances que vous ayez entendu parler de WordPress. Attends Till est comme WordPress. Si WordPress a été développé professionnellement dans cette décennie, Wait dit extrêmement convivial développeur, et il piggybacks sur le framework Django, qui est un framework python. Et ça veut dire attendre qu'il soit capable de faire tout ce que Jango peut. Il peut aussi faire tout ce que python peut dio. Maintenant, si vous cherchez à créer et à lancer un site Web dans les 10 prochaines minutes comme un site WORDPRESS , ce n'est pas le système de gestion de contenu qui vous convient. Waiter a été conçu pour aider les gens à gérer leurs sites Web correctement. Cela signifie généralement qu'il y a ah, continentalement personne, un designer, un développeur, peut-être quelques autres personnes avec une sorte d'investissement dans le site Web. Mais en général, les trois ingrédients de base pour un site Web étonnant sont un développeur Web, un concepteur Web et une personne d'entrée de contenu, ou quelqu'un qui traite avec un projet comme un gestionnaire de projet qui pourrait même être votre client. La bonne chose à propos de Wag Tail est d'attendre jusqu'à ce qu'il ait été construit avec tout cela à l'esprit. Maintenant, Wag Tails, un système de gestion de contenu est en fait assez performant. C' est rapide, c'est ce que je dis. Il est livré avec de nombreuses fonctionnalités différentes qui sont activées par défaut ou si elles ne sont pas activées par défaut. Ils sont super faciles à activer. Mais le meilleur de tous, les orteils de réveil 100% open source. Et il existe une grande communauté de développeurs pour tout type de support dont vous avez besoin. Cela étant dit, si vous envisagez d'utiliser, attendez de considérer que cette queue de wag est rapide. Il est construit à partir d'un cadre très grand, sécurisé et éprouvé appelé Django, et tout cela est construit sur python. Python exécute tout, des sites Web à l'intelligence artificielle en passant par l'apprentissage automatique des programmes simples que vous pourriez utiliser tous les jours et des programmes avancés pour les entreprises que vous pourriez ne pas utiliser tous les jours. Vous ne pouvez utiliser que dans les grandes entreprises. Le python fait littéralement tout, et wag tail est pythons Numéro un système de gestion de contenu le plus populaire 3. Comment installer Wagtail: avant que nous puissions utiliser wayto attendre jusqu'à ce qu'il soit nécessaire d'installer, et avant cela, vous devez avoir python installé. Donc, les premières choses d'abord. Si vous n'avez pas déjà installé Python, allez sur le clic de python dot org sur Téléchargements et téléchargez la version de Python que vous voulez. Je vais utiliser Python 3.7. Toute version de Fight sur 3.6 ou supérieur est recommandée, alors choisissez Python 3.63 point sept ou 3.8. Téléchargez-le, installez-le. Et une fois que vous avez python en cours d'exécution sur votre ordinateur, vous devriez pouvoir simplement ouvrir votre ligne de commande. Programmez votre programme de ligne de commande préféré et tapez simplement Python Dash V, et vous verrez la version de Python. J' utilise donc Python 3.7 point deux. Encore une fois, vous allez vouloir utiliser Python 3.6 ou plus récent maintenant pour créer un nouveau projet python. Nous devrions mettre cela à l'intérieur d'un environnement virtuel. Fondamentalement, il s' agit d'une couche entre votre projet python et votre ordinateur. Nous utilisons des environnements virtuels assez généreusement afin que vous puissiez avoir différentes versions de paquets dans différents projets sans conflit de code sur lui-même. ou vous pouvez avoir un projet exécutant Wag Tail 2.4 dans un autre projet en cours d'exécution. Attendez jusqu'à 2,7 et ils ne seront jamais en conflit. Ce n'est pas parce que vous avez une version différente qu'ils devraient rencontrer des problèmes, et c'est ce qu'un environnement virtuel fait. Cela nous permet de séparer ce problème. Un environnement virtuel peut même aller d'une couche plus profonde. Vous pouvez créer un environnement virtuel à l'aide d'une version différente de Python. Nous allons utiliser des environnements virtuels standard. Donc, si vous utilisez Python 3.7, votre environnement virtuel sera probablement python 3.7 également. Mais si nous le voulions, nous pourrions dire, 01 projet doit utiliser Python 3.4, et un autre projet a utilisé Python 3.7. Et peut-être qu'on est sur un autre projet. Et le ciel ne plaise pas, il doit utiliser Python auquel, si vous utilisez python pour s'il vous plaît mettre à niveau vers Python trois Python pour être définitivement obsolète ID. Passons maintenant aux moyens de démarrer un environnement virtuel pour un site de queue de wag. Le 1er 1 est avec une chose appelée une envie Venn VVe, et je crois que cela vient avec des versions plus récentes de Python, donc vous ne devriez pas avoir à installer quoi que ce soit. C' est en fait l'un des moyens les plus faciles d'installer un environnement virtuel. Et la deuxième façon est d'utiliser une méthode appelée Pippen. Et celui-ci est en fait plus facile. Mais cela nécessite que vous ayez réellement pip et installé. Et avant de faire quoi que ce soit, vous allez vouloir vous assurer que vous avez installé pip. Pip est le gestionnaire de paquets pythons. Qui ? Toi, pip Dash V. Vous pouvez voir que j'utilise Pip 18.1. C' est mon emplacement où Pip est utilisé. Et il est en cours d'exécution Pip sur python 3.7. Donc c'est bien. Vous devriez être capable d'écrire Run, Pip, Dash V et aussi obtenir une sorte de sortie comme celle-ci. D' accord, on va installer Wag Tail en utilisant Ve Envy. Donc, j'ai déjà python en cours d'exécution et vous pouvez le voir exécuter Python 3.7 point deux. Donc, je vais faire l'événement Python Dash M, puis le nom de tout environnement virtuel que je veux appeler. Je vais appeler ce Rocket Man Ven. En fait, ce que je vais faire est de créer un nouveau répertoire d'abord. Donc nous allons annuler que Lets faire em que dire Rocket Man CD fusée homme et vous pouvez voir mon répertoire de travail ici. Donc, je suis dans les utilisateurs Kale, sites italiens, Rocket Man. Et maintenant je vais faire python dash m ven rocketman vend. Le nom n'est pas vraiment important. C' est juste votre environnement virtuel. Donc je vais l'appeler Rocket Man Ven et on va voir va créer un nouveau répertoire pour moi ici. Alors faisons un Dash 1 A. A. Et on peut voir qu'il y a un plein pendant ici appelé Rocketman Venture juste là pour entrer dans ce truc. Tout ce qu'on a à faire est de taper Rocketman source, Venn a été activé, ce qui, si c'est ta première fois, ça va être vraiment bizarre. Mais, vous savez, après un peu de temps, vous vous y habituez. Et je suis maintenant à l'intérieur de cet environnement virtuel et vous pouvez le voir parce qu'il dit rocketman entre parenthèses à gauche de mon utilisateur. Donc maintenant, à ce stade, je peux faire Pip V. Nous pouvons voir que j'utilise Pip 18.1. Ça vient de mon environnement virtuel. C' est le dossier ici. C' est le répertoire Python 3.7 afin que tout semble bien. Allons-y. Installez wag Tail maintenant. Alors, Pip installe. Attendez, Dites. Très bien, alors attendez a été installé. Je peux maintenant faire Pip montrer Wag Tail. Cela me montre que j'utilise la version 2.7 de Wag Tail juste là. Je peux également faire pip freeze pour voir tous mes paquets qui sont installés dans ces environnements virtuels . J' ai une belle soupe. Certifiez Django Django Tree barbe, html five, lib oreiller demande six votre L'abbe, wag Queue saule. Toutes sortes de trucs. C' est donc ce qui insulte mon environnement virtuel. Mon ordinateur n'a pas accès à cela sauf si je suis à l'intérieur de cet environnement virtuel. Maintenant, je suis capable de dire que ce projet va fonctionner. Attendez jusqu'à 2.7. Et dans un autre environnement virtuel, je peux dire, hey, utiliser wayto 2.4. Utilisez une ancienne version d'attendre jusqu'à utiliser Wag Tail 1.13 si nous le voulions. Et ceux-ci ne seront jamais en conflit les uns avec les autres, ce qui est vraiment, vraiment sympa. Donc maintenant ce que nous devons faire est d'attendre le démarrage de mon site et cela va créer un site appelé mon site. Je ne veux pas que ça s'appelle ma vue. Je vais faire un site appelé Rocket Man. Alors je vais faire de l'esprit. Ils vont commencer Rocket Man. Ça va créer un nouveau dossier appelé Rocket Man. Mais je ne veux pas qu'il fasse ça. Je voulais créer un nouveau projet sur le site Web New Wag Tail. Dans le répertoire dans lequel je suis. Je suis déjà dans un répertoire appelé Rocket Man. J' ai un virtuel de ici et je veux créer ce nouveau projet dans ce répertoire. Alors allons-y et faisons-le. Vous pouvez voir que c'était très rapide. Ls Dash L. A. Et nous avons maintenant docker dossier Accueil. Gestion des exigences élevées sur le dossier txt Rocketman. C' est là que vont aller les paramètres, les fichiers statiques et les modèles. Nous avons une application de recherche et notre environnement virtuel. Donc maintenant, nous pouvons faire l'installation de pip, Dash sont les exigences dot txt et tout cela semble être déjà satisfait dans une certaine mesure , et maintenant c'est un serveur de coureur. Nous tapons juste python managé. Je cours le serveur 0.0 point zéro Colin 8000 et il devrait dire que vous devriez voir cette taxe rouge alarmante , disant que vous avez 89 migrations non appliquées et si nous devions ouvrir notre navigateur et la tête sur le support de l'hôte local 8000, nous allons pour voir cet air. En fait, c'est une bonne chose. Cela signifie que votre site Web est opérationnel. Donc j'ai juste annulé mon serveur là-bas avec contrôle. Vous voyez, je n'annule pas simplement votre serveur pour qu'il ne fonctionne plus. Et ensuite, nous avons besoin de base de données provisoire. Parce que si nous sauterons à l'endroit où cette erreur apparaît sur l'hôte local 8000, nous allons voir qu'il ne dit pas de tel site de base de queue wag table. Une table est un terme de base de données. Ceci est à la recherche d'une base de données qui a été configurée d'une manière spécifique pour commencer, et elle n'est pas configurée de cette façon. Alors allons-y et mettons-en place ça. Les déchets appropriés. Faisons Python géré à Pi mon grand, et nous verrons que cela va appliquer tous ces fichiers différents et puis si nous réexécutons son serveur avec Python géré, je lance le serveur 0000 Colon 8000. Revenons ici et rafraîchissons votre page. Wallach. Nous avons Attendre jusqu'à l'installation en utilisant V envie ou événement. Et puis pour sortir de votre environnement de vertu, il vous suffit de taper le mot désactiver. Vous pouvez voir ça ici. Désolé, c'est en bas. Mais oui, tu aimes juste le mot désactiver. Et cet homme de fusée semble s'en aller. Une autre façon de le faire est que vous pouvez avoir votre site Web Toe déjà configuré. Donc vous avez Alice Dash L A. Faisons semblant que le rocketman Vin n'existe pas. Et nous voulions peut-être utiliser Pip end. Bon, donc j'efface mon écran, tu peux voir dans quel dossier je suis. Je suis dans le dossier Rocketman de Last Dash L. A. Vous pouvez voir que j'ai toute mon extrémité virtuelle ici aussi, alors ignorons ça. Mais on a tout le temps d'attendre jusqu'à ce que le projet soit là-dedans. Souviens-toi, tout ce que j'ai fait, c'était Wag Tail Start, Rocket Man avec le point et ça vient d'installer mon projet dans ce répertoire actuel. Maintenant, si je voulais utiliser virtuel et que je pourrais faire Pippen shell ou pip moteur stalling juste dans Pippen shell, vous pouvez voir que crée un nouvel environnement virtuel en utilisant Python 3.7 point quatre. C' est en fait différentes versions Python que ce que j'utilise, juste un peu différent et d'accord, nous sommes à l'intérieur de celui-ci et vous pouvez voir que c'est l'environnement virtuel Rocket Man. Nous avons quelque chose qui semble un peu différent ici avant qu'il ne dise Caleb dire et mon chemin vers quel dossier je suis. Si je fais P W. D. je suis toujours dans mon dossier Rocket Man et je pense que vous python Dash V j'utilise une version différente de python, qui n'est ni ici ni là. Il se trouve que Pippen a décidé d'utiliser la dernière version de Python pour moi. J' ai différents environnements python mis en place, donc il a fait de la magie dans les coulisses, mais pour vous, il installerait la même version de pious sur que vous utilisiez actuellement sur votre machine. Et puis, une fois de plus, une fois que vous êtes ici, vous pouvez simplement taper python managé. Je cours le serveur 0000 8000. Mais comme vous pouvez le voir, ça va vous jeter un air parce que nous sommes dans un environnement virtuel différent. Le 1er 1 que nous avons créé était un lieu qui est un environnement virtuel différent, techniquement, et c'est un pip end. Un autre environnement virtuel fait exactement la même chose, mais il n'est pas conscient des choses que nous avons déjà installées. Alors allons de l'avant et faisons Pip installer Dash. Nos exigences point txt et cela va juste installer wayto à nouveau. D' accord, c'est tout installé. Et maintenant, je peux exécuter mon serveur une fois de plus. Retournez à mon navigateur et je pourrais juste rafraîchir parce que c'est juste de l'envie V et cela fonctionne toujours parfaitement. C' est ainsi que nous installons. Attendez d'utiliser un V Envy ou Pippen. Vous n'avez pas besoin d'utiliser l'un ou l'autre de ces deux. Vous pouvez utiliser des environnements virtuels si vous le souhaitez. C' est en fait appelé virtuel, et vous pouvez utiliser docker vagrant. Vous pouvez utiliser tout ce que vous voulez vraiment, mais ce sont deux façons assez courantes, et j'ai pensé qu'on les couvrirait car ils sont assez faciles à installer. Et ils ne nécessitent rien de spécial, comme docker, vagabonds ou de gros téléchargements. Oh, et une dernière note. Juste pour sortir d'ici. Ce n'est pas tout à fait la même chose que de taper l'activation, moins pas sur mon ordinateur. Je travaillerai peut-être pour toi. Il suffit de taper le mot « désactiver » ne fait pas tout à fait le travail pour moi. Donc ce que je dois faire, c'est frapper le contrôle. D. Donc je vais l'enlever. Contrôle plus D pour annuler ça et appuyer sur le contrôle D, et il sort juste pour moi. Assurez-vous donc que vous avez à nouveau configuré un environnement virtuel. Peu importe le genre que vous avez utilisé. Assurez-vous que vous avez couru votre pip. Installez nos exigences de tiret un txt. Assurez-vous que vous avez un blanc qui dit tout est installé. Et une fois que vous voyez cet écran d' oeuf, n'hésitez pas à passer à la prochaine leçon. Mais n'avancez pas jusqu'à ce que vous voyez l'écran de chargement de l'œuf de queue de wag heureux. 4. Pour commencer: d' accord. Puisque nous construisons un site web ensemble, nous allons avoir besoin des mêmes ressources, du même fichier. Donc j'ai déjà un tas de trucs de front end déjà fait. Un tas de CSS et de JavaScript est déjà compilé, et je vais vous le donner. Donc, vous n'avez pas à vous soucier de faire toutes les choses frontales parce que ce n'est pas un cours de front end. Il s'agit d'apprendre. Wakil CMS. ne s'agit pas d'apprendre Boots, Fondation Trapper ou Web pack ou colis sur Js ou quoi que ce soit comme ça. Vous pourrez donc télécharger ce fichier appelé Rocketman assets. Est-ce que c'est en s'excusant si c'est un peu petit là-bas. Mais nous avons des actifs de Rocketman Dot Zip et vous pourriez juste extraire ça et vous allez avoir des trucs frontaux. Donc, vous obtenez tous les goodies frontaux tout le JavaScript, la source et CSS et toutes ces bonnes choses là-dedans. Paquet de Jason. Si vous voulez faire l'avant et d'autres choses, vous pouvez exécuter l'installation de NPM et vous allez juste installer tout. Ou tu peux ignorer tout ça et on peut aller dans le dossier Rocketman et ici . Ou tu peux ignorer tout ça et on peut aller dans le dossier Rocketman et ici Vous allez voir des images CSS et JavaScript. Vous voulez sélectionner tous ces éléments, Allez dans votre projet Rocketman réel. Donc nous avons, comme le Rockem inventif du dernier projet ont même un fichier pit parce que j'ai utilisé un environnement pip aussi. Allons donc dans Rocket Man. Si votre projet ne s'appelle pas Rocket Man, il s'appellera quel que soit votre projet. Donc, dans ce répertoire ici, c'est là que j'ai installé mon application wag tail. C' est là que j'ai créé mon site d'attente. Ça ne s'appelle peut-être pas « Rocket Man ». Cela peut s'appeler votre site Web. Cela pourrait être appelé quelque chose de complètement différent, mais ce sera le nom de votre projet. Peu importe ce que vous avez tapé dans votre ligne de commande, vous allez trouver un dossier appelé Static. Et nous devrions déjà voir CSS et JavaScript là-dedans. Allons-y et collons-le là-dedans. Cela signifie simplement qu'un nom de dossier CSS existe déjà à cet emplacement. Est-ce que je veux fusionner ? Remplacera ça. J' allais tout remplacer parce que je n'ai pas besoin de fusionner quoi que ce soit. J' ai juste besoin d'écraser ce truc. Maintenant, sur une attente typique jusqu'au projet, vous n'avez pas besoin de le faire. Donc tout cela va faire est de s'assurer que nous sommes en cours d'exécution, Ah, site Web qui ressemble fondamentalement exactement les mêmes actes exactement les mêmes. Encore une fois, juste comme un petit rafraîchissement rapide. Vos trucs frontaux les trois ici, Fondamentalement tout ce qui se trouve dans le répertoire racine de vos actifs de rocket man qui se trouvaient dans le fichier zip peut aller directement dans votre projet de route aussi bien. Donc je vais monter quelques répertoires ici où j'ai mon fichier de gestion des points et je vais juste les coller là-dedans. Et vous remarquerez aussi ce que je viens de faire. J'ai montré tous les fichiers cachés. Donc, si vous êtes sur un Mac, vous allez vouloir appuyer sur le décalage de commande, puis, point, et cela affichera tous vos fichiers de points cachés. Nous allons vouloir les copier aussi. Ceci est juste un fichier Babel RC, et un éditeur de base peut résoudre cela. Nous utilisons le même type d'invention, donc vos codes vont ressembler à mon code sont ignorés afin que vous ne commettez pas accidentellement fichiers qui ne sont pas vraiment utiles pour votre repo get et la version de nœud que j'utilise. Encore une fois, je vais jeter ça dans la route du projet. Ici. La route est où géré haute vie, puis les images CSS et JavaScript vont tous dans votre répertoire statique ici, et vous devriez remplacer les dossiers CSS et JavaScript avec les nouvelles choses qui sont dans le fichier zip point à nouveau sur un projet waggle. Vous n'avez pas à le faire parce que vous aurez votre propre design avec lequel vous travaillez. Mais c'est juste pour s'assurer que toi et moi sommes tous les deux synchronisés en même temps. Donc, une fois que vous avez fini de le faire, ou si vous avez décidé d'ignorer complètement cela et de travailler avec votre propre design, c'est cool, aussi. Passons à la leçon suivante 5. Connectez-vous à l'administrateur: d' accord. À ce stade, vous devriez avoir un moyen de basepour le site Web en cours d'exécution, mais vous pourriez ne pas être en mesure d'entrer dans la zone d'administration. Donc, si vous n'avez pas votre site Web opérationnel, passons à notre extrémité virtuelle. Peu importe ce que vous utilisez. Peut-être que c'est Docker, vertu vagabonde et Ven Pippen n'a pas vraiment d'importance. Vous avez juste besoin d'entrer dans votre environnement virtuel. Donc je vais entrer dans le mien en utilisant un événement. vendeur de Rocket Man est ce qu'on appelle été activé. J' allais me procurer ce fichier et vous pouvez voir que je suis maintenant à l'intérieur de celui-ci. Et maintenant pour exécuter mon serveur va faire Python géré jusqu'à. Je cours le serveur et un moyen plus rapide est juste zéro. Colon 8000 et cela va exécuter le site Web sur le Port 8000. Nous pouvons le voir ici si je rafraîchis cette page. Port 8000 et il charge des nez parfaitement fins. Le système de gestion de contenu. Nous voulons être en mesure d'entrer dans les zones d'administration. Allons dans l'interface d'administration et comment pouvons-nous nous connecter ? C' est chez les hommes ? Admission ? C' est chez les hommes mot de passe. Nous ne savons pas ce que c'est et par défaut, Wag Tail et Django et Python. Ils sont tous très basés sur la sécurité, donc vous n'avez pas vraiment d'utilisateur. n'y a aucun moyen pour toi d'entrer là-dedans. Nous devons créer notre propre super utilisateur. Retournons à notre terminal. Annuler notre serveur avec contrôle, voir, et je vais effacer ça. Donc c'est de retour au sommet. Et nous allons taper Python géré. Je crée Super User Tout un mot que j'allais me demander un nom d'utilisateur. Je ne veux pas que Caleb appelle. Je veux juste être Caleb. Mon adresse e-mail va être Caleb à Lawrence wag tail dot com. Le mot de passe sera ce que je veux que mon mot de passe soit. Il me demandera d'y entrer deux fois parce que c'est une bonne pratique. Allons de l'avant et réexécutons notre serveur une fois de plus. Alors qu'est-ce que c'est qu'il vient de créer et d'admettre compte pour nous ? Alors maintenant, on le consigne. J' ai le nom d'utilisateur de Caleb, et mon mot de passe est quel que soit mon mot de passe. Et Wallah, je suis à l'intérieur de mon chemin. Dites aux hommes, et si jamais vous perdez le lien vers votre administrateur. C' est toujours votre site web slash admin. C' est la valeur par défaut. Vous pouvez toujours remplacer cela un peu plus tard. Et si vous venez d'installer votre premier site Web, vous pouvez simplement cliquer sur l'interface d'administration et il vous mènera là, et c'est ainsi que vous créez un moyen, Tell administrateur Super User. 6. Présentation Wagtail: Prenons une promenade rapide à travers le Wag Tail CMS avait été. Maintenant, ce sont des os très nus. Je viens de commencer un tout nouveau projet, donc il n'y a littéralement rien qui ne sort pas de la boîte en ce moment. C' est tout ce qui vient par défaut avec une toute nouvelle façon. Dites site maintenant hors de la boîte, Attendez jusqu'à ce que vient avec de nombreux composants différents, mais la plupart de celui-ci peut vraiment être divisé en environ cinq morceaux, je suppose. Eso vous avez des pages qui sont ici, vous avez des images, vous avez des documents, vous avez des paramètres et ensuite vous avez des utilisateurs. Mais pour simplifier cela, j'aime vraiment dire que vous avez des pages, des images et des utilisateurs. Ce sont les trois grands. C' est donc votre interface utilisateur. Cela vous dira combien de pages, combien d'images, combien de documents vous pouvez explorer à travers vos pages Et ici, si vous avez d'autres pages, il y aura une petite flèche ici. Vous pouvez cliquer dessus et crée un joli petit menu pour vous, ou vous cliquez simplement comme je veux éditer la page d'accueil, Cliquez sur le bouton Modifier et cela me permettra d'éditer la page d'accueil. Il y a un champ de titre ici. Donc, cela n'a vraiment qu'un seul champ, parce que encore une fois, c'est une base. Attendez le projet. Ah, nous pouvons supprimer la page sur Publier la publication soumise pour modération car il y a de la modération disponible avec Wag Tail afin que vous puissiez avoir un groupe d'éditeurs qui ne peuvent pas publier choses sans approbation. Et nous pouvons également prévisualiser notre page à tout moment. C' est notre onglet de contenu. Dans notre robinet de promotion. On a une limace. Donc, si vous vouliez être votre site Web dot com slash sur tiret moi ou votre site Web dot com slash contact pour une page de contact qui va être votre limace. Ici, vous pouvez avoir un titre personnalisé qui remplace le titre de la page par défaut. Certains apparaissent dans les options de menu, ce qui vous aide parfois à créer une barre de navigation. Selon la façon dont le développeur l'a configuré, vous disposez d'une description de recherche. C' est donc la description de recherche que Google utilisait dans les moteurs de recherche utilisés et toujours une bonne idée d'avoir une description de recherche dans. Il se peut qu'il ne soit pas disponible. Texte sur votre page qui pourrait ne pas être visible, je veux dire, mais il pourrait être dans la partie principale de votre page. Ensuite, nous avons des paramètres. Ce sont des paramètres de publication planifiés une date à mettre en service dans une date à expiration. Pour cela, il faut un travail de Cron. Si vous n'êtes pas un développeur, un travail Cron est fondamentalement une tâche qui s'exécute tous les X nombre de minutes, d'heures ou de jours, et il vérifiera automatiquement si vous avez une page qui doit être mise en ligne ou la page. Il doit expirer. C' est vraiment génial pour la promotion. Donc, si vous avez une page et que vous essayez de faire, ah, Black Friday deal et c'est littéralement juste noir vendredi, vous pourriez dire Black Friday pour un 2019 était le vendredi 29 novembre et nous obtenons à l'époque et puis l'expiration date va être exactement la même heure, exactement le même jour, mais à 11 heures de la nuit, Vous avez, cependant, besoin que d'être mis en place sur votre serveur. Ce travail Cron doit être configuré par quelqu'un qui a accès au serveur. Ce n'est pas automatique. Ensuite, nous avons un bouton de vue en direct ici. C' est ce que notre page ressemble actuellement à nouveau tout nouveau site Web, donc il n'y a rien là-dessus. Nous avons différents modes de confidentialité. Cette page est-elle publique à tout le monde ? Est-il privé mais accessible uniquement aux personnes qui sont connectées ? Nous pouvons dire oui à cela ou privé, mais accessible aux personnes avec un mot de passe suivant. Et puis vous pouvez définir un mot de passe pour ou est un privé et accessible aux utilisateurs au sein de groupes spécifiques. Eh bien, nous n'avons que les deux groupes ici. Nous avons des modérateurs et des rédacteurs. Nous pourrions aussi créer d'autres groupes et dire que seules certaines personnes peuvent voir cette page. Suivant. Jetons rapidement un coup d'oeil à la recherche. Je suis juste à la recherche de la maison. Oui, je veux quitter la page. Il va trouver les pages pour moi. Il trouvera des images, des documents, des utilisateurs, toutes les autres choses qu'il peut chercher. Il n'a vraiment trouvé qu'une chose ici, trouvé une page d'accueil appelée maison, et ici nous pouvons éditer la page que nous pouvons voir en vie. Nous pouvons ajouter une page enfant. Nous n'avons qu'un seul type de page disponible, donc il va nous demander de créer une page d'accueil sous la page d'accueil. C' est un peu gênant, donc on ne va pas trop s'attaquer à ça. Mais si vous avez des pages. Et peut-être que vous avez créé une page au mauvais endroit. Vous pouvez les déplacer. Vous pouvez les copier, vous pouvez les supprimer sans publication. Vous pouvez même regarder les révisions de page sur cette page est et avoir des révisions. Mais si j'ai changé un texte sur la page, si je change un contenu, il apparaîtra dans ma section de révision. Ici et encore, tout cela vient par défaut avec queue blanche. Ensuite, nous avons des images ici, alors allons de l'avant et ajoutons une image. Donc je vais juste télécharger une image appelée Rocket Launch One. Je crois que c'est la courtoisie de Space X. Téléchargez cela et fait comme ça. On a une image ici. On a un toi, Earl, pour qu'on puisse copier le rythme de l'emplacement du lien. Je n'ai pas fait un nouveau dans un nouvel onglet, et vous pouvez voir que cette image est assez grande, en fait, mais il est là. Nous avons donc intégré l'hébergement d'images automatiquement. Vous pouvez changer l'image. Vous pouvez ajouter des balises, donc si vous voulez la rechercher, vous pouvez ajouter des balises. Vous pouvez changer le titre de celui-ci et attendre que vient avec cette idée vraiment cool d'un point focal . Le point focal est, vous savez, quand vous téléchargez une image d'un groupe de personnes et, comme si le visage de quelqu'un est coupé et que vous ne voulez pas que cela se passe bien dans Wag Tail et vous pouvez sélectionner la partie de l'image. C' est alors le plus important, chaque fois que Waittil essaie de recadrer l'image pour n'importe quelle page sur laquelle vous travaillez, elle va se rapprocher le plus possible de cette section. Tu dis que c'est la partie importante. Déplacez l'image ici. Donc, quand il pousse, il se rapproche un peu. C' est vraiment, vraiment sympa. Allez-y et sauvegardez cette image, et c'est vraiment tout ce qu'il y a. Je suppose que nous pourrions également supprimer l'image ou supprimer la zone focale si nous le voulions. Passons aux documents. Les documents sont fondamentalement exactement la même chose que les images, donc je vais ajouter un document ici. Rocket Man actifs dot zip n'a pas un aperçu car il fichier zip. Allons de l'avant et mettre à jour ce clic sur les documents à nouveau, et nous pouvons voir que nous avons un document ici appelé rocketman assets dot zip. Je peux le télécharger directement, ou je peux cliquer ici. Prenez ce lien. Il s'agit donc d'un lien Copier l'emplacement du lien. Collons cela ici, et bien sûr, il essaie de le télécharger à nouveau. Donc maintenant, nous avons l'hébergement de fichiers. Une chose à garder à l'esprit est qu'ils ne sont pas privés, alors n'hébergez pas les numéros de carte de crédit ou quelque chose comme ça ici. C' est certainement une mauvaise pratique. Ensuite, nous avons des paramètres, des paramètres internes. Par défaut. Nous avons des utilisateurs, des sites de groupe, des collections et des redirections. J' ai un utilisateur ici appelé Caleb. J' ai reçu l'adresse e-mail prénom, nom de famille mot de passe. Je peux changer mon mot de passe là-dedans, et j'ai des rôles. Modérateurs et éditeurs. Je ne vais rien changer. Je suis un super utilisateur. J' ai soigné les hommes. J' ai plus de droits que ces deux, donc je n'ai pas besoin de changer ceux qui retournent aux utilisateurs. Vous pouvez toujours ajouter un nouvel utilisateur. Et ici, vous pouvez dire s'ils sont un administrateur ou pas un administrateur ou s'ils ne sont pas un administrateur, devraient-ils faire partie d'un certain groupe ? Les groupes viennent avec certaines autorisations, et il y a des règles de mot de passe, toutes sortes de bonnes choses. Ok, parlons de groupes. On a deux groupes ici. Rédacteurs et modérateurs. Jetons un coup d'oeil aux éditeurs. À quoi peut accéder un éditeur dio ? La façon dont Telemann cool mais ne peut pas ajouter de redirections ou les sites ou les groupes de collections ou les utilisateurs ne peuvent pas changer ? Aucun d'entre eux ne peut supprimer aucun d'entre eux. Ce sont des autorisations de page, ils peuvent ajouter. Ils peuvent modifier, mais ils ne peuvent pas publier la suppression en bloc, et ils ne peuvent pas verrouiller les pages. Les collections sont essentiellement comme des dossiers pour vos images, de sorte que vous pouvez placer toutes vos images ou documents dans une forme quelconque de collection. Et puis vous pouvez ajouter des autorisations autour de cela également. Les images ont aussi des collections. Nous n'avons qu'une collection appelée Route, mais la même chose s'applique là. D' accord. Ensuite, nous avons des sites de sorte que vous pouvez avoir plusieurs sites hébergés sur une seule instance d'attente jusqu' maintenant, nous avons juste celui appelé port hôte local est 80. Je vais changer jusqu'à 8000 parce que c'est sur ça que mon site Web fonctionne. Donc, si je fais ce port hôte local 8000, c'est mon site Web vient en changement. C' est à 8000 juste pour l'égaler. Ah, nom du site je vais nous changer en fusées juste parce que c'est ce que ce site va s'appeler , et vous pouvez même changer la page d'accueil pour ça. Alors choisissons une page différente. Nous pourrions nous ne pouvons pas parce que nous avons seulement la seule page parce que c'est une installation de base de Attendez jusqu'à si nous avions une autre page, peut-être un type différent de page d'accueil. On pourrait l'échanger entièrement. Et est-ce le site par défaut ? Alors que nous n'avons qu'un seul site. Donc oui, nous allons dire que c'est le site par défaut. Ensuite, nous avons à nouveau des collections. Collections, air, vraiment juste des dossiers où vous pouvez y mettre des images et des documents. Et puis vous pouvez mettre des autorisations autour de cela afin que certains groupes d'utilisateurs aient un certain accès à certaines collections. Je ne vais pas ajouter une collection parce que ce n'est pas si utile pour moi en ce moment particulier . Ah, sommets et passer à redirige un lecteur X A vraiment sympa. Vous pouvez dire toute personne qui est en ligne sur, Disons que votre site Web dot com cachent mon offre 2019. Donc peut-être que c'est une sorte de page de destination, et je veux les rediriger vers une page de destination différente, un service différent, peut-être un site Web complètement différent. Je pourrais rediriger tout le monde vers google dot com google dot com. Donc, quiconque va à mon offre 2019 en fait, ce ne sera pas là. Toute personne qui va sur mon site Web dot com slash mon offre Dash 2019 va être redirigée ici, et vous pouvez configurer toutes ces différentes redirections si vous le souhaitez. Vous pouvez même choisir une page interne à l'intérieur de wayto vers laquelle rediriger si vous le souhaitez. Et enfin, nous avons des paramètres de compte. Vous pouvez définir une image de profil. Vous pouvez modifier votre adresse e-mail, modifier vos préférences de notification de mot de passe. Il y a des préférences linguistiques. Si ceux-ci sont tous activés, ce qu'ils sont par défaut, vous pouvez définir votre fuseau horaire actuel Micro et le fuseau horaire n'est même pas défini, donc je veux probablement aller et définir cela un peu plus tard et vous pouvez même changer votre nom. Donc ce sont toutes les choses de base qui viennent avec Attendez jusqu'à la sortie de la boîte, et chaque composant est extensible dans une certaine mesure. Donc, oui, nous n'avons qu'une page en ce moment, mais nous pouvons ajouter des centaines de pages plus tard si nous le voulions. Bien sûr, nous n'avons qu'une seule image. Nous pourrions ajouter plus si vous avez une page de contact. Si un développeur a créé une page de contact pour vous, vous verrez les soumissions de formulaire ici ainsi que dans votre menu. Si vous avez activé des extraits de données réutilisables, vous verrez une petite section dans votre menu appelée extraits, et vous pouvez voir d'autres choses personnalisées que les développeurs mettront dans. Il y a de l'os, mais hors de la boîte. C' est ce que tu as avec ma queue. 7. Édition de la page d'accueil: D' accord, allons de l'avant et éditons notre page d'accueil. Cela fonctionne en fait avec du code ici, donc je vais entrer dans mon environnement virtuel. J' ai recours à des fournisseurs, donc je vais me procurer mon fusées a été activé et je suis à l'intérieur. Je veux juste gérer ce site. Donc, je vais exécuter Python géré haut serveur sur le port 8000 et nous pouvons voir ici si je rafraîchis , ça marche. Mais si nous allons réellement à la page d'accueil et essayons d'éditer quelque chose ici ou même si nous essayons de voir la page de vie, nous n'avons encore rien fait, alors passons en fait à cela. Donc, nous allons ajouter un certain nombre de champs ici parce que pour l'instant, nous n'avons que le champ titre dans notre contenu principal. Nous avons des champs de promotion et des paramètres, et c'est génial. Attendez de nous donner toutes les options de la, mais nous voulons ajouter plus. Nous voulons que la page d'accueil ait un peu plus d'épices. Alors ajoutons comme la bannière de la page d'accueil. D' accord, donc je viens d'ouvrir mon éditeur et j'ai ouvert le projet, donc j'ai tous mes fichiers ici, vous pouvez les voir sur le côté gauche. J' utilise juste le code V. En passant, vous pouvez utiliser n'importe quel éditeur. Ça n'a pas vraiment d'importance. Donc j'ai mes affaires avant ici. J' ai une application pour la maison. J' ai des médias. C' est là que mes images, mes documents et tout ce que nous allons télécharger. Euh, pas l'homme fusée. C' est là que mon réglage, fichiers statiques et mes temples allaient être. On va faire beaucoup de travail là-dedans. Nous avons l'environnement virtuel, dont nous n'avons pas besoin du tout. Ce n'est pas à des fins d'édition, et nous avons une application de recherche que nous n'allons pas utiliser. Donc la première chose que nous voulons dio est d'ouvrir la maison et de descendre aux modèles dot pie, et nous allons voir ici. Il n'y a rien du tout là-dedans. Et si nous prenons un coup d'oeil pour la base dot pie et nous faisons défiler vers le bas, nous voyons APS installé , nous avons la maison et la recherche et un tas de wayto ones modèle cluster tag il et un tas d' AP jangle tous installés. Ceci est livré par défaut avec votre site de queue de wag. Les deux que nous voulons faire attention à entendre notre maison à la recherche et en fait plus nous voulons faire attention à une maison. Donc, cette maison H o M e correspond à cette application ici. Et si nous voulions nous débarrasser de la page d'accueil, nous pourrions simplement le commenter ou la supprimer entièrement. Sauvegardez redémarrez notre serveur et nous n'aurons plus accès à la carte entière. On s'en penchera davantage au fur et à mesure que nous suivrons ce cours. Mais si vous avez ajouté une autre application ici, comme les services, vous venez d'ajouter comme ça, nous parlerons plus de ce petit peu plus tard et comment démarrer une application Django et jambe queue correcte dans notre maison slash modèles dot pie, nous avons juste une seule classe appelée page d'accueil parce que l'accueil de l'APP est activé. Wag Tail et Django disent, Oh, c'est une classe est une page. Ok, eh bien, je vais automatiquement provisoire petit peu d'espace dans notre base de données et la structure correctement pour votre page d'accueil et passé signifie juste qu'il ne fait rien. Donc, ce que nous voulons faire maintenant, c'est que nous voulons ajouter quelques champs que nous voulons ajouter peut-être du texte principal . Ah, le texte du bouton et peut-être une image de fond pour une bannière. Alors faisons-le un à la fois. Faisons du texte principal et ce sera juste un champ char très simple, un champ de caractère. Donc, ça se met en jangled. Et donc ce n'est pas une queue de wag. Voici Jenkin. Nous pouvons dire parce que cela vient de modèles dot Nous pouvons voir si nous regardons les importations ici vient de django dot db modèles d'importation. Donc nous allons créer un nouveau champ de char ou un champ de voiture. Le code V est assez agréable pour me montrer toutes les différentes options ici. Le 1er 1 que nous voulons vraiment ces longueurs maximales étaient au lieu de la longueur maximale d'environ 100 40 caractères juste pour ce texte principal, nous allons dire qu'il peut en fait, être vide. Et peut-être, ajoutons de l'aide Text help taxes égales à un texte de sous-titre sous le titre de la bannière. Quelque chose comme ça. On pourra toujours les ajuster plus tard, et je vais nettoyer un peu ça. Mettez-les sur des lignes séparées pour qu'il soit un peu plus agréable et juste comme ça. Nous avons un nouveau champ. On doit faire des migrations et des trucs, dont je parlerai dans une minute. Allons de l'avant et ajoutons notre prochain champ. Ajoutons un lien vers une autre page de queue de wag. Maintenant, nous n'avons qu'une page de queue de wag, donc cela ne va pas être super applicable en ce moment, mais nous allons voir comment cela fonctionne. Alors créons un bouton. Et pour cela, nous allons utiliser des modèles de clé étrangère point. Nous allons sélectionner une clé étrangère à partir du noyau de queue WEG. Dot page Blank est égal à true. On va dire que c'est facultatif. Non est égal à vrai, donc il peut n'avoir absolument rien dans la base de données. Donnons à cela un nom lié de juste plus fondamentalement abandonné le nom lié. Pour la plupart. Le texte d'aide va être Live que up. Sélectionnez une page facultative pour lier à cela va être pour R C t un bouton. Nous ne savons pas vraiment à quoi cela ressemble en ce moment, mais je vais vous montrer juste un peu et nous avons besoin d'un de plus ici juste pour satisfaire Django , parce que encore une fois nous travaillons avec Django ici sur la suppression. Que faisons-nous quand tout Paige auquel ce lien est lié est supprimé ? Ce que nous allons dire, modèles pointent tout et nous allons créer un texte de bouton à nouveau. Cela va juste être un champ char régulier, donc les modèles dot chair Field donnent à celui-ci une longueur maximale de 50 de sorte que le texte du bouton ne peut pas être trop long. Donnons-lui du texte par défaut, bien que Lire la suite puisse être vide. On va dire non. Cela doit toujours être réglé, même s'il n'y a pas de bouton sélectionné pour dire que ce texte de bouton doit être sélectionné. Il doit être rempli et nous allons ajouter du texte de bouton d'aide et vous verrez à quoi tout cela ressemble une fois que nous allons juste un peu plus loin. Maintenant, enfin, nous voulons ajouter une image ici. Faisons fond de bannière. L' image est égale aux modèles sortis. C' est une autre clé étrangère, mais cette fois nous allons être liés à des queues de wag. Images image point. Il s'agit de leur image par défaut, donc si vous utilisez un modèle d'image personnalisé, vous allez utiliser une valeur différente ici. Mais nous ne le sommes pas. Nous allons juste utiliser des images standard wag tail, donc nous allons lier à celle-ci. Blank est égal à false, mais non est égal à true. qui signifie que dans la base de données ce champ, la colonne appelée Banner Background Image est autorisée à être vide et vide signifie Lorsque vous allez enregistrer la page, il doit en fait avoir une valeur dedans. Donc, dans la base de données, cela ne peut rien avoir. Mais quand vous remplissez le formulaire, il doit avoir quelque chose. C' est la différence que le nom associé est égal à. Et cousin allait jeter ça. Aide texte l'image de fond Boehner, je suppose, est ce que nous pouvons dire et sur supprimer. Qu' est-ce qu'on va à dio ? Disons que le modèle est dot set No. Maintenant, allons de l'avant et sauvegardons cette Ouvrez notre terminal. Il a redémarré. Tout semble correct, mais lorsque nous ouvrons votre navigateur, nous verrons quand nous actualiserons notre page. Il est dit qu'il n'y a pas de colonne de ce genre. La maison est l'APP. La page d'accueil est le nom de la classe. Le texte principal est le nom de colonne d'une base de données. Alors, comment faire de cette base de données existante ? Eh bien, nous ne ferons rien avec la base de données en particulier, nous allons laisser Django gérer ça pour nous. Et donc c'est vraiment, vraiment facile. Tout ce que nous avons à faire est clair. Laissez-vous partir. Faisons en python gérer les points pie faire des migrations. Et ce que cela va pour dio est vraiment juste de créer un ensemble d'instructions sur la façon dont nous voulons restructurer notre base de données ou comment nous voulons modifier la base de données. Donc ça a fait une nouvelle migration pour la maison appelée 0003 autobla, bla, blah, bla nombre de tas là-dedans. Et si nous ouvrons notre éditeur dans notre dossier de migration, nous verrons 0003 auto, bla, bla, bla, bla. Et comme un tas d'instructions ici, tu n'as pas besoin de savoir tout ça. Django gère tout cela pour vous, qui est vraiment, vraiment sympa. Mais à ce stade, tout ce que nous avons, c'est un ensemble d'instructions. Nous n'avons pas dit à notre base de données d'utiliser cet ensemble d'instructions. Donc, notre prochaine étape sera python gérer dot pie, mon grand, mon grand, Et ce que cela fait, c'est qu'il prend toute la migration non suivie, donc il va stocker quelles migrations ont déjà été appliquées dans la base de données. Cela va dire, 00003 Auto dans l'application maison n'a pas été exécuté. Laissons ça. Prenons toutes les instructions que nous voyons ici et qui est de modifier la base de données. Et alors faisons-le. Il était entré. Les migrations ont été exécutées. Ok, et maintenant nous pouvons relancer notre service. Faisons Python géré. Je cours le serveur 0 8000 Ouvrez à nouveau un navigateur, Donnez-nous un rafraîchissement et notre page se charge. Mais nous avons un problème. Nous voulions avoir un texte principal, ah, bouton, bouton, où nous pourrions sélectionner une autre page de queue de wag, un texte de bouton et une image de fond. Et puis, si ça arrive, ce n'est pas en promotion. Ce n'est pas dans les paramètres. Ce n'est pas dans le contenu maintenant. Pourquoi c'est ça ? Eh bien, il y a en fait une bonne raison à cela, c'est juste parce que vous avez défini des champs dans votre modèle. Ce n'est pas parce que vous voulez modifier votre base de données et stocker certaines données que vous voulez toujours que ces données ou ce champ soient exposés. Vous voudrez peut-être des données ici qui ne peuvent être modifiées que par programme, et donc parce qu'aucune application Web sur la face de cette planète. Je peux vous dire ce que vous comptez sur Lee. Tu sais ce que tu prévois. Cela ne va exposer aucun de ces champs pour nous. Donc nous devons maintenant exposer ces champs et dans Wag Tail. C' est vraiment, vraiment facile. Donc, sur chaque page et je vais juste faire défiler ici, vous pouvez voir que je suis toujours sur la page d'accueil. Sur chaque page, nous obtenons des panneaux de contenu est égal à des panneaux de contenu de point de page. Ceci est une classe de page fournie par Wag Tail qui nous donne notre titre et quelles que soient les valeurs par défaut weg attendre jusqu'à ce que veut nous donner. Et ce sont les panneaux de contenu. Et donc nous allons juste dire, Donnez-nous les panneaux de contenu existants. De plus, ajoutons une liste à cela. Maintenant, nous avons différents types de panneaux ici, donc nous devons nous assurer d'utiliser le bon. Si nous utilisons un panneau de champs qui est juste pour le texte normal. Nous avons du texte principal ici, et ce n'est qu'un panneau de texte normal. Attendez que vous comprendrez que c'est un champ char et que ce devrait être juste une ligne de texte. C' est une entrée de texte html régulière le prochain pour un bouton va être un panneau de sélection et nous allons devoir les importer en seulement une seconde. Et c'est tout ce qu'on dio. Et donc ce texte de plomb correspond à ce texte de plomb ici et ce bouton correspond à ce bouton juste là. Donc maintenant, nous devons ajouter. Mais dans le texte et l'image de fond de bannière, allons de l'avant et ajouter un panneau de champ de plus. texte du bouton du panneau de champs est ce qu'il a été appelé. Et puis nous allons ajouter une dernière image bannière panneau de sélection d'image image image de fond. Maintenant, si nous économisons moins et que nous vérifions notre terminal va se plaindre. Oui, il est dit que les panneaux de terrain ne sont pas définis. Si jamais vous voyez cela, cela signifie simplement que fondamentalement ce que vous cherchez n'a pas été importé dans votre page ou dans votre fichier python. Allons de l'avant et importons ceux-ci d'attendre. Dites aux gestionnaires d'édition dot admin que ces panneaux ces air appelés gestionnaires d'édition Importons le panneau de champ et le code V s est assez agréable pour essayer de sentir automatiquement cela pour moi Panneau de champ et panneau de sélection de page et le panneau de sélection d'image ne fait pas viennent d'Edmund chez les gestionnaires. Il vient de wayto dot images dot edit handlers Importer image Chooser panneau dire qu'il semble que tout ici fonctionne nominalement, qui est une excellente nouvelle. Si, pour une raison quelconque, votre serveur est mort, il vous suffit de le réexécuter. Il suffit de courir. Python a géré. Je cours le serveur 0000 8000. Revenons ici et rafraîchissons votre page et regardons ça. Nous avons le bouton de texte de bouton de plomb texte et une image. C' est plutôt sympa. Donc nous allons changer notre titre de propriété en fusée et maintenance parce que c'est ce que va faire ce site Web. Entretien des fusées. Laissez-nous gérer le sale boulot. Vous vous concentrez sur le lancement dans l'espace. Quelque chose comme ça. Un bouton. C' est plutôt sympa. Cela nous donne un panneau de sélection de page. Donc, si nous avions plus de pages, nous pourrions aller explorer plus. Nous en verrons plus à l'avenir. Nous n'avons vraiment que la page d'accueil en ce moment, donc en fait nous n'avons pas besoin de cela du tout. Donc, il est clair que choisir le texte du bouton. Nous avons dit qu'il doit toujours être là, et la valeur par défaut est lire plus et une image de fond de bannière. Je vais télécharger une nouvelle image ici. Appuyez, téléchargez Cool et allons-y et publions cette page. Maintenant, quand nous voyons la vie encore rien ne s'est passé à nouveau, Wade dire n'est pas un système de gestion de contenu de site Web 10 minutes. C' est pour les sites Web personnalisés, et à ce stade encore, attendez que Django et Python ne sachent pas ce que vous cherchez. n'y a pas de thème pré défiant ici. C' est juste ce qui attend jusqu'à ce qu'il arrive. Donc maintenant, nous devons aller et éditer notre page d'accueil elle-même. Donc ça ouvre notre éditeur. Je vais ouvrir le code V. Allons-y et fermons ce dossier. On n'en a pas besoin. Et si nous regardons dans notre application personnelle, puis dans notre répertoire de modèles, nous avons un dossier d'accueil qui a une page d'accueil et une page d'accueil. La page d'accueil est celle que nous voulons éditer ici. Il s'étend à partir de la base de html. Nous parlerons plus de basé sur HTML. Je crois que dans la prochaine leçon va charger statique. Il a un corps classant ici, un CSS supplémentaire si nous le voulons et où nous voulons mettre notre contenu principal. Donc juste à titre d'exemple, faisons ce H one hello world Et tout ce que nous faisons est de remplacer ce contenu parce qu' avant ce que nous avions Waas il y avait la maison. Page d'accueil incluait toutes ces choses ici. On ne veut pas ça. Donc on va juste dire Hey, écraser, sauver. Mlle Refresh Page dit Bonjour, monde. Donc maintenant, nous éditons notre modèle de page d'accueil à ce stade, qui est assez bonne nouvelle. Allons-y et débarrassons-nous d'autres choses ici. Nous n'avons pas besoin de CSS supplémentaire du tout ou de classe de corps. On pourrait décider de l'introduire, un peu plus tard. Réintroduisez ça un peu plus tard. Mais pour l'instant, nous n'avons pas besoin de ça. Nous avons juste besoin de changer la section de contenu principale et parce que nous n'utilisons pas la balise statique , nous pouvons nous en débarrasser. Nous en verrons un peu plus sur l'électricité statique un peu plus loin. Voyons donc comment nous pouvons obtenir le titre de la page. Donc nous voulons changer le monde bonjour pour dire, entretien des fusées. C' est le titre de cette page d'entretien des fusées. Donc, nous pourrions juste faire le crochet Curly, crochet bouclés page point titre. Et si nous rafraîchissons notre page ici, dit l'entretien des fusées, c'est plutôt sympa. Revenons en arrière et voyons à quoi ressemble certains de nos textes principaux, donc la taxe sur les leads points de page. Maintenant, si vous vous demandez, Caleb, où est-ce que vous obtenez le texte principal ? D' où vous obtenez le titre ? Revenons à nos mannequins. Le texte de piste est défini ici, donc parce que nous sommes sur un modèle de page, vous pouvez utiliser le point de page C'est l'objet de page, puis vous pouvez utiliser le texte de soulignement de plomb. C' est notre champ personnalisé ici. Texte de plomb. Et si tu te demandes, OK, OK, l'amour ok, ouais, ça aura du sens. Mais d'où avez-vous obtenu le titre ? C' est une excellente question. Wait Till est livré avec beaucoup de goodies déjà intégrés. Donc, si je fais un clic droit ici, allez à la définition. Tous les éditeurs n'ont pas cette fonctionnalité, en passant, mais celui-ci le fait, ce qui est vraiment sympa. Vous pouvez toujours vérifier Le code source est bien, obtenir hub dot com slash wag queue slash wag queue wag. C' est la page que nous utilisons, et elle est déjà fournie avec un champ de titre. Il y a un champ de charge régulier là-dedans avec un nom détaillé. Longueur maximale du texte d'aide. Il y a une balle de titre de brouillon. Il y a un tas d'autres choses ici, mais nous avons un titre parce que nous utilisons cette classe dans notre classe python. Donc, dans le monde de Python, nous pouvons hériter d'autres classes et obtenir tous les goodies qui vont nous donner. Dans ce cas, nous héritons de la classe de page waggles, et il est livré avec Title, ce qui est à peu près exactement la même chose que nous disant Title est égal au champ char , yada, yada, yada tous les champs là-dedans, puis y accéder sur son modèle avec le titre de point de page. Très bien, disons ceci et voir ce que dit notre texte principal. Regarde ça. Nous devons supprimer du texte là-dedans. Il est minuscule et il n'est pas tout coiffé, mais il est maintenant en train de tirer dans nos champs personnalisés. Bon, donc ce que je vais faire ici c'est supprimer ça et je vais me mettre dans une pâte à l'avant et tout, et ensuite nous allons à la couche dans la partie attendre jusqu'à ce que le modèle. D' accord, donc j'ai juste collé des trucs avant. Je n'ai rien fait avec le travail de Wag Tail qu'on a fait. Donc si je prévois ça ouais, ça n'a pas l'air génial. Nous ajouterons le style et d'autres choses plus tard. Je pense que c'est dans la prochaine leçon. Nous allons ajouter tout le style, donc ça a l'air vraiment bien, mais pour l'instant nous voulons travailler avec une partie de cette logique. Donc, comme le titre de notre page ici devrait être quel que soit le titre de notre page en fait, nous pouvons utiliser accolades pour le titre de la moustache Syntex. On a un texte principal ici. Nous pouvons faire le texte de plomb de point de page. Nous avons des textos de bouton ici, nous pouvons faire faire faire faire faire faire faire le bouton de soulignement de bouton de point de page et vous de vous demander d'où j'ai eu celui de qui vient mais dans le texte Nous avons aussi menti du texte ici, qui est autorisé à être vide, ce qui signifie que c'est facultatif, nous devons donc nous assurer que c'est facultatif. Maintenant, nous pouvons faire quelques déclarations si ici si le texte de plomb de point de page et si et c'est juste gabarit de Django régulier, vous savez, si votre tout nouvel orteil à Django et wag Tail, c'est fondamentalement comment nous ajoutons la logique dans notre page. Nous avons utilisé un support bouclé, suivi d'un signe pour cent, et pour la fin de notre logique, nous utilisons le signe pour cent puis le crochet bouclé. Et si jamais nous voulons juste afficher des informations, nous utilisons juste pour boucler des accolades ensemble. Alors allons-y. Prévisualisez ceci. On peut vous voir l'entretien des fusées. Laissez-nous gérer le sale boulot. Nous devons vérifier si ce bouton existe réellement. Définissez cette fille et peut-être une image de fond. Donc, avant même que nous disions qu'il y a un bouton, allons de l'avant et faire si le bouton de point de page et encore, je viens d'obtenir que de faire à faire ou clé étrangère. Et je vais inventer ça parce que ça a l'air plus agréable comme ça. Et pour le lien, nous allons vous donner le bouton point de page que vous êtes dehors parce que Button est une clé étrangère. Donc, cela va faire un lien vers une autre page. C' est peut-être la page I numéro 4. C' est ce qui va être lié parce que c'est ainsi que les clés étrangères fonctionnent généralement. Donc va à nouveau chercher la page I d. numéro quatre avec ce bouton point de page, et puis il va nous donner notre u R l tout ce qui va être maintenant qui ne va pas apparaître avec quoi que ce soit. Donc, si nous prévisualisons la page, sont mais qu'il disparaît réellement, changeons cela. Et nous allons juste définir la page d'accueil publier Angela. C' est difficile à voir. Nous allons corriger cela dans un peu, mais il apparaît et le lien. Si vous regardez en bas à gauche, dit hôte local Port 8000 qui est, en fait, la page d'accueil. Enfin, nous devons définir une image ici. Et c'est donc la première fois que nous allons travailler avec des images, Certainement pas la dernière fois que nous allons parler plus d'images en profondeur au fur et à mesure que nous progressons dans ce cours. Donc la première chose que nous devons faire est de charger. Ce que cela veut dire, c'est, Hey, lorsque vous chargez ce modèle, Django, lorsque vous chargez ce modèle, sachez qu'il s'étend sur la base de html. Nous parlerons plus de cela et des blocs dans la prochaine leçon. Ah, et il y a une section là-dedans que nous voulons écraser le contenu appelé, mais aussi juste pour que vous le sachiez, nous devons charger de façon, dire des images, balises parce que nous allons utiliser une balise que Wag Tail nous donne et qui nous permet d'utiliser une balise de modèle appelée Image. Et nous lui disons comme premier paramètre quelle image nous voulons vous. Alors faisons l'image de fond de bannière. Notre deuxième option va être Comment voulons-nous créer cette image ? Ça va recadrer l'image. Peu importe ce que nous faisons, nous voulons le remplir avec certains et hauteurs. Est-ce qu'on veut dire qu'il y a une hauteur max ou Max avec quelque chose comme ça ? On en parlera plus tard. Encore une fois, je veux juste vous montrer ce genre de juste pour vous mouiller les pieds avec des images et nous allons dire Phil 1600 par 800 comme image BG. Et maintenant, nous avons accès à l'image BG en tant que variable. Alors tapons des accolades. BG soulignement image point u R l Rafraîchissons notre page. Nous verrons que nous avons un u r l ici. Si je vais de l'avant et copiez cette coller dans notre navigateur. Regarde ça. Il a fait l'image pour nous. Il l'a recadrée. Donc c'était à l'origine une image carrée que je crois et comment il est 1600 par 800 et donc juste géré tout cela pour nous, ce qui est vraiment, vraiment sympa. Maintenant, nous devons prendre ce u R l et l'appliquer comme arrière-plan. Et donc j'ai déjà un peu de style ici et je veux ajouter cette image de fond que vous êtes . Je garde ce rafraîchissement et nous consorions à voir que les images là encore un peu . Le style viendra dans la prochaine vidéo, je crois où cela va réellement commencer à ressembler à un site Web. Il y a aussi d'autres champs que nous pouvons ajouter à notre modèle. Il y a des choses comme Stream sent que nous pouvons ajouter Il y a validation et des choses que nous pouvons ajouter que nous ajouterons un peu plus tard. Pas tout de suite. À ce stade, ce que nous avons fait est que nous avons modifié la page d'accueil de weg par défaut que nous avons donnée pour les champs supplémentaires , donc il est déjà livré avec des choses comme le titre. Nous avons dit que nous voulons vous donner un texte principal, un texte de bouton bouton et une image d'arrière-plan. Maintenant, si vous appliquez un jour ceci et que vous appliquez un panneau de champs au sélecteur de page ou au sélecteur d'image. Je vais vous montrer à quoi ça va ressembler dans les annonceurs quand nous éditerons notre page. Notre bouton devient maintenant une liste déroulante sur toutes les pages de notre site d'attente, et le sélecteur d'images devient également une liste déroulante. toutes les images disponibles que nous avons sur notre site Web. Ce n'est pas vraiment ce qu'on veut. Ce n'est pas une bonne interface utilisateur. Donc, si jamais vous voyez cela, il y a des chances que vous utilisiez simplement le mauvais panneau de sélection. Les panneaux de champ sont parfaits pour les chaussures de page de texte ou les panneaux sont parfaits pour les étrangers. La clé va à une autre page comme nous le voyons ici, clé étrangère va à une autre page, nous avons dit que cela pourrait être n'importe quelle page de queue de wag, n'importe quelle page de queue de wag future, nous pourrions créer une houle un autre panneau de texte et puis une image pour notre image d'arrière-plan. Et encore une fois cela nous permet juste de choisir et de télécharger des images de façon dynamique, ce qui est vraiment, vraiment sympa. Ensuite, nous allons de l'avant et travaillons avec le modèle de base et faisons en sorte que notre site Web ressemble quelque chose 8. Travailler avec le modèle de base: dans la dernière leçon. Nous avons travaillé un peu avec la page d'accueil et le modèle de page d'accueil, mais nous allons de l'avant et en fait la structure basée sur le modèle HTML. Maintenant, si vous ne savez pas ce qu'est le modèle basé sur HTML, regardons en fait cela d'abord. Donc, je vais fermer les fichiers qui avaient ouvert à partir de la dernière vidéo ouvrir point de base html et vous pouvez voir qu'il est dans mon dossier Rocket Man slash templates. Donc, si je ferme tous ces éléments et rouvre celui-ci, nous pouvons voir que j'ai des modèles Rocketman et ensuite basés sur HTML. Et l'idée est que chaque page est finalement dérivée d'un modèle de base. Donc, au lieu d'avoir à déclarer les méta de titre HTML cinq classes node.js toutes ces autres choses, nous n'avons pas à le faire à chaque fois. Au lieu de cela, ce qu'on peut dire, c'est , c' que tout le reste est bon, c'est bon. Mais remplissons simplement ce bloc de contenu ou remplissons simplement ce bloc de classe de corps. n'y a pas besoin d'ajouter JavaScript à chaque fois parce que nous pouvons simplement l'ajouter dans notre basé sur HTML, et il sait juste. Et donc à titre d'exemple, si j'ouvre la page d'accueil point html. Nous avons une section ici appelée Bloquer le contenu. Nous avons également une section dans notre point de base html appelée contenu de bloc. Et donc ces deux matchs, qui veut dire n'importe quoi ici parce qu'on l'a dit. Il s'étend sur la base de HTML. Tout ce qui se trouve dans notre contenu de bloc. Tout ça va écraser ce qui n'est pas là. Il se trouve qu'il n'y a rien là-dedans en ce moment, mais on pourrait lui donner un défaut. Tout ce que nous avons à faire est de dire bonjour monde, et cela sera automatiquement écrit sur n'importe quelle page qui utilise cette section de contenu de bloc . Il y a juste quelques choses que je veux nettoyer ici juste pour rendre ce site un peu meilleur. Nous ne vérifierons pas si JavaScript est activé ou désactivé, bien que vous vouliez peut-être garder cela. On ne va pas s'inquiéter du titre ou de la description ou quoi que ce soit du genre. Pour l'instant, nous avons une feuille de style globale, et ceci est à la recherche de statique. CSS rocketman dot CSS Maintenant Il y a quelques leçons, nous avons vu cela chargé ici dit Load statique , et nous avons dit comment nous n'en avons pas besoin. On n'utilisera pas cette fois. Nous le sommes. Ce que cela fait est dit Hey, dans le wag jangled Dell'Apa, vous avez un dossier statique quelque part, Quoi que vous l'ayez nommé, parce que nous pouvons changer le nom de ce dossier. Nous pouvons même spécifier que les dossiers, pas locaux, pas locaux, pourraient être stockés sur les trois d'Amazon ou les espaces océaniques numériques ou quelque chose comme ça. Mais ce que nous disons ici, c'est vérifier le dossier statique. Ensuite, il y a un dossier CSS, et il y a un fichier appelé Rocket man dot CSS. Maintenant, voyons si cela existe réellement. Donc, dans un dossier Rocket Man, nous avons un répertoire statique, en fait juste appelé statique, ce qui est drôle de façon de nommer ça. Ensuite, nous avons un répertoire CSS, et nous avons bootstrapped CSS et bootstrapped sur CSS dot map. Donc, ce n'est pas appelé Rocket Man dans notre projet, ceci est appelé bootstrap dot CSS. Maintenant, si vous n'avez pas amorcé sur CSS dans votre projet, vous allez vouloir revenir en arrière quelques leçons et télécharger les fichiers du projet. J' ai déjà fourni ces fichiers pour vous, donc il vous suffit de les copier et de les coller dans votre répertoire statique. Donc si tu n'en as pas, tu vas probablement en vouloir. Et puis nous avons du javascript global ici, alors jetons un coup d'oeil à nouveau. Cela veut dire que les sources statiques partout où cela pourrait être. On sait juste que c'est juste ici. Fuller a appelé Js. Et celui-ci, c'est Rocketman Dot Js. Non. Pour une raison quelconque, j'ai décidé d'appeler ce point d'index Js et ça correspond ici. Allons de l'avant et donnons à cela une sauvegarde rapide et un aperçu. Donc je vais enregistrer ce dossier, retourner sur notre page d'accueil et Walla. Ça n'a pas l'air mal. On n'a rien d'autre à afficher ici, et c'est bon. Mais nous devons attendre la barre de l'utilisateur, qui est vraiment sympa, parce que si vous voulez ajouter un enfant, Page a ajouté cette page montrant exploré ou le wag dire à un homme que vous pouvez faire toutes ces choses et qui n'apparaît que si vous êtes le Admin. Et si l'attente d'utiliser une barre est activée, ce qui est juste là. Donc, si jamais vous avez voulu vous débarrasser de cela, vous supprimez simplement cette actualisation de sauvegarde et cette barre utilisateur disparaît. J' aime qu'il soit là, même si c'est assez pratique. Allons de l'avant et nettoyons des choses dont nous n'avons pas besoin sur ce site. Mais, vous savez, ça pourrait vous être utile à l'avenir. Donc, si jamais vous voulez modifier votre classe corporelle, vous voudrez peut-être garder ce blocage ici. Parce que, par exemple, si nous allons sur notre page d'accueil, nous pourrions jeter ceci ici et nous pourrions appeler cette page d'accueil quelque chose comme ça. Et cela fera essentiellement cela lorsque la page d'accueil est chargée. Mais pour ce site, nous n'avons pas besoin de cela parce que ce site est très simple. Donc je vais me débarrasser de ça juste parce qu'on n'en a pas besoin. Et puis pour notre section de contenu, je veux juste envelopper cela dans un domaine d'éléments principaux. Donnez-nous une idée du contenu. Ah, le classique Fais des cours de bootstrap ici. Alors, marge de conteneur, pourquoi ? Accès pour Et le rôle va être simple et simple, et notre contenu va vivre à l'intérieur de là. Allez-y et prévisualisez notre page et oh, ok. Eh bien, ce genre de bannière de courtier, vous savez ce qu'on peut faire, c'est qu'on peut créer un nouveau bloc ici. Créons un nouveau bloc appelé Banner So Block Banner et par défaut va n'avoir rien là-dedans. Et mettons fin à ce bloc. Et ce que cela va faire est de nous permettre d'utiliser ce bloc sur sa page d'accueil, et il ne sera pas enveloppé avec le style bootstrap va venir avec l' élément principal. On va contourner ça et l'injecter ici au lieu d'ici. Et c'est une partie vraiment sympa. Tout ce qu'on a vraiment à faire, c'est changer ce mot ici, deux bannières. Donc cela correspond maintenant à ça, et à la fin de notre bloc, nous pouvons lui donner un nom ou nous n'avons pas à lui donner son nom. J' aime le nommer. Parfois, je ne le nomme pas. C' est un peu facultatif, mais on va changer quand Do Banner aussi. Et si on ferme ça, on peut voir Block Banner un tas de trucs à l'intérieur. Il y a 25 lignes de code là-dedans, et puis on met fin à notre bannière de bloc. Allons de l'avant et sauvegardez que rafraîchir notre page maintenant nos bannières haut et nous avons une section de contenu ici. Donc si nous inspectons notre page pour faire, nous pouvons voir que nous avons un Jumbotron ici. C' est notre bannière. Ça fait partie de cette partie ici. Ah, et puis nous avons une section principale défiler vers le bas. On a une section principale ici. Cette partie en surbrillance jaune. Mais il n'y a rien dedans. Mais c'est là que nous allons mettre notre contenu futur. Donc, cela fonctionne avec Basé sur HTML, nous avons modifié un peu la page d'accueil aussi. À ce stade, nous pouvons également revenir à notre page d'accueil et faire un peu de nettoyage. Nous n'utilisons pas du tout la page d'accueil. Nous pouvons réellement regarder à travers son projet entier pour la page de bienvenue point html, et nous en avons un ici qui vient de nos paquets de site dans un environnement virtuel qui est juste la valeur par défaut, celui qui vient avec Wag Tail et l'autre qui vient par défaut avec Wakil. Ce n'est pas dans notre projet, pas ce que nous voyons dans le côté gauche ici. Alors allons de l'avant et supprimons. On n'en a plus besoin, et on y va. Nous avons maintenant une page d'accueil avec une bannière. Il y a une image de fond. Ça a l'air plutôt sympa. On a un titre du meilleur texte de piste et on a un bouton. Un bouton d'appel à l'action. 9. App et pages Services: jusqu' à maintenant, nous avons créé une page d'accueil. Nous avons modifié le basé sur chaque modèle d'e-mail, et nous avons chargé quelques nouveaux JavaScript et CSS, et maintenant nous voulons ajouter un autre type de page. Alors allons de l'avant et créer un texte de page de service couple. Non, pour cela, nous allons devoir le faire. Source Est-ce que Rocketman a été activé ? Entrez à l'intérieur si vous utilisez Pip et c'est juste Pippen show. Si vous utilisez Docker, c'est docker exact I t. Quel que soit le nom de votre conteneur. Bash, ça te mettra à l'intérieur et tu pourras fuir. Alors tu pourras courir. Python a géré. J' exécute le serveur pour 8000 40,000 juste le port par défaut que les développeurs américains ont tendance à utiliser. Ce n'est en fait rien de spécial à ce sujet. Et maintenant, quand nous rafraîchissons votre page, ok, nos serveurs fonctionnent. Et à ce stade, nous voulons réellement créer une nouvelle application. Donc on pourrait théoriquement, je ne vois pas pourquoi on ne pouvait pas. Nous pourrions mettre toutes nos pages dans des modèles de slash, pas de tarte. C' est une convention de dénomination bizarre. Nous disons que toutes nos pages doivent être dans les services APP à domicile doivent être dans toute la carte. Contact Page doit être dans l'application d'accueil. Divers page doit être dans l'application maison qui n'a aucun sens du tout. Donc, nous allons créer une toute nouvelle application, et cela est en fait juste une commande de gestion jangle. Allons de l'avant et annulons notre serveur et nous allons taper. Python a géré. Je lance des services. Et si nous regardons dans notre éditeur, nous avons maintenant un dossier ici appelé Services. A un tas de fichiers dans vos vues. Teste les modèles absents Minute Dot pie et le dossier Migrations avec un fichier vide et il dot pie dedans aussi. C' est une application jingle standard. Ce que je vais faire est de supprimer un tas de ces fichiers. Nous n'avons pas besoin de vues. On n'a pas besoin de tests et on n'a pas besoin d'hommes. Ma queue s'occupe de beaucoup de ça pour nous et les tests. Si vous voulez écrire votre propre test, absolument, vous pouvez. Nous ne allons pas faire ça parce que nous ne faisons rien de super fou avec ce site de queue de wag , le reste va être des modèles dot pie et nous allons aussi vouloir ouvrir notre haut de base. Pas celle à base de tarte. Et où nous avons notre robe APS installée en dessous. Ici, allons-y et donnons-lui des services. N' oubliez pas de le mettre en apostrophes ou guillemets avec une virgule car il s'agit d'une liste python . Et ce nom, tout cela reflète ce nom ici. Ce nom, ces deux noms doivent correspondre. Donc je vais enregistrer ce dossier, et fermer ça. Et je suis de retour dans les modèles de services, pas dans les tartes. Donc, dans une application Django régulière, vous savez que j'ai supprimé le fichier appelé views dot pie, une application Django irrégulière. Vous avez des modèles, des vues et des modèles. Eh bien, nous allons garder le fichier des modèles, mais la vue nous n'avons pas vraiment besoin de ça avec un site de queue de wag parce qu'une page de queue de wag combinera la vue et le modèle en même temps. C' est en fait moins à gérer, et à mon avis, c'est une chose vraiment, vraiment sympa. Vous pouvez voir tout ce qui se passe sur une page dans un seul fichier par rapport à une application Django , vous devez basculer entre vos modèles et vos vues. Nous allons également garder aps dot pie juste pour une bonne pratique. Gardez votre fichier innit dot pie qui dit à Python essentiellement d'inclure les autres fichiers ici , même s'il est vide. Et gardez vos migrations et le fichier Unit vide à l'intérieur de cela également. Ensuite, continuons et traitons de nouvelles classes de page. Nous voulons créer deux nouvelles pages, donc la page de liste de services de classe va être une page. Nous ne l'avons pas encore importé, alors passons et faisons des pages de service de classe, juste une page standard. On ne sait pas ce qui va être là-dedans non plus. Alors passons aussi. Cela n'existe pas. Ce n'est pas une variable. ne s'agit pas d'une importation. Cela n'existe pas encore, donc nous devons nous assurer que cela existe. Donc, à partir de la page d'importation de modèles Wag Tail Doc ou point. Et c'est vraiment tout ce qu'on a à dio. Donc maintenant, à ce stade, nous pourrions exécuter python, gérer haut, faire des migrations. Nous pourrions également exécuter python, gérer une migration de secteurs, et cela créerait un fichier de migration qui contient la page de liste de services et la page de service . Et puis nous pourrions commencer à ajouter ces pages à notre façon de dire que les hommes n'allaient pas le faire encore, même si nous allons ajouter des choses à cela d'abord. Donc, notre page de liste de services Allons de l'avant et ajoutez Peut-être comme un sous-titre. Donc, nous savons déjà que Attendez jusqu'à vient avec le champ de titre qui est à l'intérieur de la page. On n'en a pas besoin parce qu'il est déjà là. Prenons un sous-titre, cependant, et nous allons dire que le sous-titre pourrait être assez long. Faisons le champ de texte point des modèles peut être vide. Oui, nous allons dire que fondamentalement, c'est facultatif. Cela n'a pas besoin d'être là du tout. Donc, lorsque vous enregistrez la page, le champ de sous-titre peut-il être vide ? Oui, c'est ce qu'on dit. On va dire la longueur maximale de 500 caractères, quelque chose comme ça. Maintenant, rappelez-vous quand nous coureurs migrations, cela ne va pas apparaître sur notre page lorsque nous allons modifier une page. Oui, cela sera là en arrière-plan, mais il n'est pas exposé, donc nous devons l'exposer avec des panneaux de contenu. Nous le faisons en disant que les panneaux de contenu sont égaux aux panneaux de contenu de points de page, donc nous allons prendre tout ce que nous avons déjà donné. C' est le champ titre. Nous en savons beaucoup, et nous allons ajouter une liste à cela. Et ici, nous voulons simplement un panneau de champ pour le sous-titre. Et encore une fois, ce sous-titre Nom de champ correspond à celui-ci dans les citations. Et peu importe si ce sont des citations ou des apostrophes qui ont juste besoin d'être une sorte de type chaîne, juste comme un exemple qui le change, cela n'a pas vraiment d'importance. Ils ont tous les deux bien fonctionné, donc c'est cool. Donc, nos pages de liste de services Maintenant, nous allons avoir un sous-titre maintenant dans notre page de service. On va en vouloir un peu plus. Ce sera une page détaillée, et ainsi de suite sur sa page détaillée, peut-être que nous voulons une sorte de description. Peut-être que nous voulons un lien vers une sorte de page interne comme un appel à Action Button ou peut-être un lien vers une page externe, quelque chose qui est en dehors de notre site de queue de wag. Ce serait le U. R L. à un bouton d'appel à l'action. On va avoir un bouton d'action. Donc nous avons besoin de quelqu'un qui envoie des textos là-bas, et c'est ah, ça nous donne aussi une image de service d'imagerie, donc nous savons que nous avons cinq champs ici. Donc, la description cela pourrait être un peu plus long. Nous allons donc faire un champ de texte au lieu d'un champ de graphique. C' est la différence. Champ RH. Celui-ci est généralement utilisé pour des quantités plus courtes de texte et de texte. Le champ est utilisé pour de plus grandes quantités de texte. Le blanc est égal à la trêve. On va dire que c'est facultatif et une longueur maximale de 500 caractères. Maintenant, nous avons une page interne. Nous l'avons fait avec la page d'accueil déjà. Nous avons besoin que ce soit une clé étrangère si clé étrangère à tout type de page Wag Tail page point de base Wag Tail . Et cela ressemble beaucoup à partir de la page d'importation de base wechsel. Et si nous ouvrons notre tarte de points de base, nous pouvons en fait une application ici appelée Wag Tail Core. Donc, ce que cela fait, c'est qu'il regarde à travers le noyau de queue wag, et il cherche un modèle de page. C' est ce que nous allons pouvoir lier. Teoh Blank est égal à vrai. On va dire que c'est facultatif. Non est égal à vrai, donc il pourrait être stocké comme absolument rien dans la base de données juste une valeur nulle. Le nom connexe à cette fin particulière n'est pas important. Donc, nous utilisons juste un symbole plus, aider le texte à sélectionner un interne, attendre, dire Paige et enfin supprimer pour satisfaire les besoins de jangles. On va dire que les mannequins sont des sentinelles. Nous pourrions le faire parce que non est égal à vrai Sentinel est autorisé. Ensuite, nous avons une page externe, donc peut-être que quelqu'un a appelé action sur leur page, et ce bouton est censé aller sur un autre site Web. Peut-être qu'il est app dot mon site Web dot com au lieu de juste mon site Web dot com slash inscrire. Qui sait ? Il y a beaucoup de raisons différentes à cela. Celui-ci est vraiment facile. Celui-ci est juste un champ ul. Je vais dire que blank est égal à true et nous n'avons pas besoin de spécifier no est égal à true, parce que quand il s'agit de champs de texte normaux, tout ce que nous allons dio c'est soit il a une chaîne vide ou il a quelque chose comme ça dedans . On ne va pas dire que ça pourrait être non, c'est juste une bonne pratique de jingle. On a un bouton Texan ici. Nous avons fait cela avec la page d'accueil ainsi que les modèles Dutch Hartfield Blank est égal à vrai. Voulons-nous que ce texte de bouton soit facultatif ? On pourrait faire ça. Je ne vois pas pourquoi. Ce que nous ne pouvions pas faire que nous pouvons toujours vérifier s'il y en a, mais dans le texte. Sinon, indiquez le texte par défaut. Et parce que c'est HR Field, nous faisons une longueur maximale de 50. C' est assez long pour Button, mais nous avons cela et puis une image de service. Celui-ci doit être une image. Donc, nous faisons des modèles dot clé étrangère, et cela va lier à wag queue images point image Donc encore une fois qui va à l'application attente jusqu'à images et est à la recherche de la classe d'image. Nous n'utilisons pas d'image waittil personnalisée. Nous pourrions spécifier notre projet pour utiliser une coutume. Attendez jusqu'à l'image, mais nous ne le sommes pas. Nous allons juste utiliser l'image d'attente régulière en ce moment. Nous allons dire non, ça pourrait être vrai, donc ça pourrait être absolument rien dans la base de données, mais vide est égal à faux. Ainsi, chaque fois que vous enregistrez la page, vous devez avoir une image sélectionnée lors de la suppression. Et ceci est juste un exemple de la façon dont ces noms de propriété n'ont pas vraiment d'importance dans l'ordre, alors que le 1er 1 doit être là. Mais ces autres ces arguments de mot-clé air donc peu importe quel ordre là dans So on. Supprimer est égal aux modèles point J'ai dit Pas de texte d'aide. Cette image sera utilisée sur la page de liste de services. Je sais juste que parce que j'ai pré-planifié cela et sera recadrée à, je pense que c'est quelque chose comme 570 pixels par 370 pixels. Nous l'utiliserons probablement également sur cette page. Oui, il sera recadré 5 17 Ah, sur cette page, On y va, quelque chose comme ça. C' est juste utile. Le texte est ce qu'il est. Et bien sûr, nous avons besoin d'un nom connexe d'un signe plus, et c'est tout. Ensuite, nous devons ajouter nos panneaux. Mais faisons ça dans une seconde, parce que je veux te montrer une petite chose. Alors ouvrons notre Edmund et il n'est pas en cours d'exécution. Exécutons les panneaux de champs Server 8000 non définis. Ok, cool. Cela est attendu de Wag Tail pointillé hommes point et il gestionnaires importer panneau de champ. Nous en aurons besoin plus tard qui satisferont ces modèles d'erreur particuliers. Cette clé étrangère n'est pas définie. Oui, c'est parce que ça aurait été une faute de frappe. Les modèles pointent la clé étrangère. On y va. Lié. Nommé à nouveau. C' est juste attraper toutes mes fautes de frappe terribles liées. Nommé est juste un nom lié. J' ai dû redémarrer manuellement celui-ci. Pas d'erreurs. Ok, cool. Alors maintenant, ouvrons notre administrateur. Nous avons une page ici, Nous avons des serviteurs de fusée, Nous pouvons ajouter un enfant Bage, et nous pouvons ajouter une page d'accueil, une page de liste de service ou une page de service. Ajoutons donc une page de liste de services. Oh, non, on a un 404 et c'est l'air que je voulais te montrer. Le wag Goldman va essayer de gérer avec élégance ce problème. Fondamentalement, ce que cela dit est sur cette page, cela n'utilise en fait aucune donnée de la base de données. Cela passe juste par tous les APS enregistrés et la vérification des pages qui, dans ce cas , passe par l'application de service. C' est le nom ici, services AP et recherche une page de service et une page de liste de services. Et donc il n'utilise rien de la base de données, mais à ce stade, mais à ce stade, nous cliquons sur la page de liste de services et il dit, Oh, non, non, quelque chose a cassé parce qu'il demande des données de la base de données et il ne l'a pas encore. Nous n'avons fait aucune migration. Donc, comme sur la page d'accueil, nous allons créer de nouvelles migrations. Donc c'est vous que Python a réussi. Je fais des migrations. Et encore une fois, cela va juste créer des instructions pour notre base de données. Ensuite, nous devons gérer cette migration de tarte pour les appliquer à notre site Web. Allons-y, serveur Runner une fois de plus la page de mise à jour et attendez. Bam ! Il est là. Nous avons une page de liste de services. On va appeler ce service. On peut lui donner une limace spéciale. Appelez ça les services, je suppose. Et un sous-titre. Voici tous les services que nous pouvons effectuer sur votre fusée parce que apparemment c'est un démarrage avec beaucoup d'argent. Allons de l'avant et publions cela et nous pouvons voir cela et nous voyons que le modèle n'existe pas. Maintenant, gardons ça là une seconde pour revenir à ça dans un instant. Je laisserai cet onglet ouvert quand je reviendrai ici. Je peux maintenant aller dans mes pages. J' ai eu l'entretien des fusées, une page en dessous qui est la page des services. Toutes vos pages doivent vivre sous votre page d'accueil, puis nous avons un bouton d'édition. Alors je reviens. Nous avons Arrow car il y a maintenant des pages enfants et nous pouvons voir les services. Maintenant, allons de l'avant et ajouter un pager enfant. C' est Atty Service Page. Mais si nous regardons cela, cela ne montre rien que nous avons réellement ajouté. Nous avons ajouté une description, page interne, page externe, mais dans le texte et son image de service. Mais nous n'avons plus ajouté de panneaux. Attends Till et Django, ils disent, gros, vous avez ces champs, mais nous ne savons pas si vous voulez qu'ils soient tous exposés, donc vous allez devoir les exposer vous-même parce que encore une fois, nous ne connaissons pas la logique qui sous-tend votre demande. Donc vous allez devoir gérer ça, et c'est en fait une façon très préférée de faire les choses. Donc je suis juste dans les modèles de services que la tarte. Je suis sous la page de service et ici, je vais ajouter des panneaux de contenu est égal à des panneaux de contenu de point de page , plus une liste donc à nouveau. On va juste dire, Hey, on va trouver des panneaux de contenu ici. Mais prenons aussi cette queue de wag un titre que celui qui vient par défaut avec pari. Oh, et maintenant nous devons en ajouter quelques-unes. Alors allons-y. Copiez tous ceux que je suis Pei citant ici. Donc j'ai une liste à faire référence à partir du commentaire Ce cas, il ne jette en fait aucun problème pour moi. Donc j'ai une page interne ici, non ? Je veux utiliser un panneau de champs pour une page interne. C' est vrai ? J' ai également une description pour la page interne. Non, c'est une clé étrangère d'une page. Je veux que ce soit un panneau de sélection de page. Sinon, nous allons obtenir une liste déroulante de toutes nos pages, et ce n'est pas une façon de vivre la vie. Donc panneau de sélection de page et nous allons de l'avant et ajouter un panneau de champ régulier pour notre description . Ensuite, nous avons une page externe. C' est juste un champ ul. Donc, la page externe est notre champ URL juste ici, vous êtes tous le champ est vraiment juste un champ de texte avec une validation ul supplémentaire, donc cela pourrait être une pagaie de champ parce que c'est un champ régulier. Ensuite, nous avons encore un texte de bouton. Celui-ci n'est qu'un champ de texte normal. On peut voir ça ici. C' est juste un champ char, et puis nous avons une image de service. Ceci est différent parce que c'est une clé étrangère d'une image que nous ne voulons pas afficher. Liste de toutes les images que nous pouvons sélectionner. Nous voulions avoir un motile de sélecteur d'image comme un petit pop-up et vous permet d'en télécharger un à la volée. Ajoutons donc un panneau de sélection d'images. Et à ce stade, si je garde ça, mon terminal va se plaindre si durement que je manque des importations. Il est là. Chaussures payantes ou panneaux non définis va dire la même chose sur le panneau de sélection d'image. Remontons au sommet. Ajoutons des chaussures payantes ou un panneau. Nous savons d'après quelques leçons Go que le panneau Wag Tail Image Chooser ne vient pas de l'administrateur d'Anders. Il vient de l'image à, et il y a le panneau de sélection d'image d'importation, et c'est juste pour que tous vos trucs d'image restent les mêmes images, air sorte d'un pilier de base derrière Wag Tail. Allons de l'avant et disons que Rafraîchissez notre terminal. Oh, aucun module nommé Attendez jusqu'à l'image. C' est parce que c'est une faute de frappe, ses images. C' est au pluriel. Et on y va. Maintenant, lorsque je rafraîchis cette page, quand je veux ajouter une nouvelle page de service, vous pouvez la voir ici. J' ai maintenant un titre, une description dans une page interne. Je peux sélectionner une autre page, et vous pouvez réellement parcourir toutes les pages de votre site Web. De cette façon, nous pouvons ajouter une page externe. Donc peut-être que je veux que cela aille à l'espace x point com Mais dans le texte, vérifiez cette image de service. Je vais utiliser un que j'ai déjà téléchargé, appelé Rocket Image. Et comment le service va-t-il s'appeler ? Ajoute un service de nettoyage. Je suppose qu'on va nettoyer. Les Rockets s'assureront qu'il est beau et brillant, blanc et lisse, sans frottement et toutes ces bonnes choses et ensuite une description. Ici. Il s'agit maintenant d'un champ de texte, nous avons donc plusieurs lignes. On peut voir ça ici, tu ferais de le faire. Nous pouvons faire plusieurs lignes à. C' est plutôt sympa. Je suis juste comme, hum, texte d'ipsum chaud là-dedans. Allons-y, publie Page and View Live, et nous allons voir la même chose. Ces modèles n'existent pas encore. Maintenant, ce que cela fait est de chercher une page de service, et il obtient réellement le nom automatiquement. Donc si on descend ici, on peut voir que c'est une page de service. Attendez que Njenga soit assez intelligent pour savoir que ce n'est pas l'application de services. Donc, il va regarder dans un dossier appelé Services et la page de service va nous changer en cas de serpent, Donc ça va aller souligner le service page point html. C' est le modèle par défaut va chercher maintenant. Si nous revenons à notre erreur, nous pouvons réellement voir si je peux faire ce modèle plus grand n'existe pas. On a un joli CRL. Donc, j'étais site Web dot com slash services nettoyage slash, et nous pouvons réellement voir où il essaie d'obtenir cela. Ce modèle de si premier endroit qu'il recherche est dans notre projet Rocketman dans les modèles dans les services, puis la page de service. Alors fermons tout ça. Nous allons dans un homme de fusée, nous avons nos modèles ici et il cherche un dossier appelé Services et un fichier appelé service page dot html. Donc c'est la première Place est à la recherche des deuxièmes places, va regarder dans l'application maison parce que nous avons une application appelée maison. Donc, il va regarder là-dedans et ensuite va regarder dans l'application de recherche qu'il va chercher . Je prends la maison comme exemple. Accueil a un dossier appelé Modèles, puis un sous-dossier appelé Accueil, puis une Page d'accueil . Donc, il cherche vraiment la même chose. Seulement cette fois, il est à la recherche de modèles, dossier de services de barre oblique, puis point de page de service html. Donc, au lieu de la maison, ce sera les services et ensuite le service payé tir. HTML. Nous ne voulons pas cela là-dedans parce que c'est vraiment ajouter pour fusionner deux AP ensemble. Ce que nous finirons par faire, c'est que nous allons créer un nouveau modèle ici comme ça. En fait, faisons-le maintenant. Services page point html. Donc j'ai juste divisé ma page ici. J' ai la page de service que chaque mois dans la gauche, j'ai la page d'accueil html point sur la droite et encore une fois que le paiement de service a vécu sous modèles, services et dans la page de service. C' est exactement ce que Wag Tail et Jangle attendent. Maintenant, nous devons copier quelques choses que nous disons, Hey, nous voulons utiliser notre A typique basé sur le fichier HTML, juste le fichier générique. Ajoutons un nouveau bloc ici et appelons-le du contenu comme notre bannière. Mais nous voulons simplement ajouter du contenu là-dedans et dans notre contenu. Faisons bonjour à partir de la page de service point html. Revenons à notre page où nous recevons cet air. Zoom arrière. Actualiser bonjour à partir de la page de service point html. Maintenant, dans les prochaines leçons, nous allons travailler avec ceci et aussi la page de liste de services, qui vous donne actuellement une erreur. Nous allons travailler avec ces deux et les rendre assez beaux, et nous allons en apprendre davantage sur le côté de la gestion des modèles des choses 10. Page Service: avant de continuer à ajouter des fonctionnalités et des champs de données à nos pages de service, rendons ces pages un peu respectables. C' est la partie amusante derrière mais le développement, et il est assez crucial d'avoir un beau site Web à la recherche. Donc, au lieu d'avoir cette page qui dit juste bonjour à partir du point de page de service html, continuons et mettons à jour cela. Donc ça ressemble à un bon service, Pedro. Au moins, ça commence à prendre une sorte de forme. Après cela, nous allons mettre à jour notre page de liste de services. J' ai donc la page de service ouverte ici. Comment nous allons ajouter un modèle de page de liste de services, et nous allons rendre cela un peu plus agréable aussi. Donc, les premières choses d'abord. On doit savoir avec quoi on travaille. Pendant que nous travaillons avec une page de service ici. On a une page de service. Nous avons une description, page interne, page externe, mais dans le texte, nous avons une image de service et quelques panneaux. Allons à notre terminal et faisons en sorte que cela soit opérationnel. Alors, source de notre environnement. Donc je suis dans une source, l'homme de fusée, puis été activé. Et nous y sommes. On est à l'intérieur. Et puis juste Python a tout simplement géré. Je dirige le serveur sur le port 8000 et quand je reviens à mes annonceurs, nous pouvons voir que cela fonctionne. Je peux rafraîchir ma page et cela fonctionne. Ça ne me donne pas une erreur en disant que ce n'est pas opérationnel. Alors ouvrons notre page de service ici et obtenons le titre et la description juste à titre d' exemple. Donc ici pourrait rendre ça plus grand aussi. Ici, nous pouvons dire bonjour à partir du titre de point de page et jetons une description ici aussi bien. Description du point de la page. Et comme une mise à jour rapide, je reçois la description du champ du modèle, le champ de texte que nous avons créé dans la dernière vidéo. Donc, j'ai enregistré ce fichier et nous allons le rafraîchir et nous pouvons voir dire bonjour du nettoyage. C' est le type de service et un tas de texte ipsum chaud qui remplit. C' est exactement ce que nous avons mis dans notre titre de page est Nettoyage et Laura MIPS, hum, texte pour la description. Bon, donc j'ai juste mis un peu d'avant et des trucs ici, html, un peu de CSS, et ça fait vraiment que la page, vous savez, commence à ressembler à une page réelle. Donc, si je retourne à mon navigateur et que je clique sur Rafraîchir, c'est ce que nous allons voir. Nous verrons quelque chose dans ces lignes, mais avons une image sur les droits, le titre de la page, description et un bouton, et cela, mais doit aller quelque part. Alors allons de l'avant et ressentons cela avec les champs que nous avons déjà ajoutés. Nous savons que nous avons la description du titre, la page interne et la page externe Ah, mais dans le texte et une image de service. Donc, nous allons travailler avec plusieurs choses différentes ici. Alors commençons par le haut. Nous avons un titre de page ici. Nous voulons utiliser le titre réel de la page. Donc ce que je vais faire, c'est juste utiliser des accolades, accolades doubles. Il est le titre. Et pour la description, je vais faire la même chose avec la description. Donc, la description des points de page et ceux-ci sont juste enveloppés avec des accolades ou la sorte de syntaxe de moustache . Allons de l'avant et sauvegardons cela et actualisons notre page. Nous pouvons voir que cela commence déjà à se réunir. Allons de l'avant et travaillons avec ce bouton textes juste un peu. Donc, nous savons dans nos modèles que nous avons une page interne et une page externe et un texte de bouton. Mais au Texas, la plus rapide à partir ici. Alors, allons de l'avant et changeons ce texte de bouton. Donc, le texte du bouton point de page. Actualisez votre page. Il est dit, regarde ça. est ce qu'il dit quand on est en train d'éditer Are payé ? Oui. Bien sûr, il est dit, regardez ça. Ok, Maintenant, nous devons déterminer si une page interne ou une page externe a été donnée et créer un euro. Donc nous allons prendre cela dans un peu plus long approche ici. Je vais jeter des règles horizontales ici juste pour qu'on puisse voir le texte ici. Et c'est là que les filles vont sortir à titre d'exemple. Tout d'abord, nous avons cette page interne. C' est le nom du champ. Ça s'appelle la page interne. Maintenant, c'est une clé étrangère d'une page de queue de wag, ce qui, dans la base de données, signifie vraiment que c'est un nombre stocké, le numéro quatre, le numéro cinq, numéro 10 quoi que ce soit est en arrière-plan dans la base de données. C' est ce qu'il est stocké comme mais jangling wag tail. Ils sont assez intelligents pour savoir que c'est une clé étrangère de l'âge de Wag Tail Corp. Ils sont assez intelligents pour savoir que c' Donc, une page standard, fondamentalement de quoi cela est fait pour que je puisse sélectionner n'importe quelle autre page. Nous savons que c'est une clé étrangère une autre page, et il crée l'objet pour nous. Donc maintenant tout ce que nous avons à dio est de taper page point page interne, et nous allons ah, prenons juste le titre. Nous pouvons saisir le titre de la page que nous relions Teoh, qui est les services. Donc, il devrait juste dire les services. Et bien sûr, ça dit juste les services. Allons-y et attrapons ça. Paige, vous étiez tous au lieu du titre. Qu' est-ce que tu attrapes, Earl ? Et quand nous actualisons votre page, elle est là. Ça nous donne le parent. Vos services de barre oblique l est la page où nous pouvions voir tous nos services, et cela correspond effectivement à la barre U. R L. Les services sont la page de liste des services U et la page de nettoyage. Nous sommes actuellement sur notre page détaillée, et c' est ainsi que nous l'avons imbriquée dans le Wag Tail. Edmund. Donc nous savons que celui-là fonctionne. Qu' en est-il de la page externe ? Eh bien, la page externe est juste du texte. Ça ne peut pas être autre chose. Nous lui avons dit de simplement l'enregistrer dans la base de données sous forme de texte. C' est ce qu'est un u R L Field. C' est juste du texto. Donc, si nous ajoutons une autre règle horizontale ici et nous regardons la page externe point de page, continuons. Rafraîchissez ça, dit-il. Espace x point com Donc maintenant, nous devons déterminer si l'un d'entre eux a rempli Utilisez-le si le champ de l' autre l'utilise, et si l'autre, ou si aucun d'entre eux ne sont plutôt utilisés, n'affichez pas le bouton du tout. C' est maintenant que nous avons une logique à travailler. Nous savons que ça allait marcher. Donc, pour ce lien, nous devons dire si page point interne page ou page point page page page externe externe. Si cela existe , le bouton apparaîtra. On est juste en train d'envelopper ça dans un if et une fin. Si déclaration. Donc, c'est juste de la logique à l'intérieur de notre modèle. C' est une déclaration si basique maintenant avec cette fille, nous devons déterminer si nous allons utiliser ou chercher, puis utiliser la page externe d'abord ou la page interne. J' aime d'abord utiliser la page interne afin que nous puissions faire si la page interne point si cela existe , que , nous savons soit la page interne ou externe existe à partir de cela. Si déclaration. Si cela existe, nous allons ajouter des accolades et vous êtes dans dupage point interne page point vous Earl et qui correspond à celui-ci ici en ligne. 12. Allons de l'avant et créons une page externe de point de LF Statement elliff page. Eh bien, tapez dans accolades page point externe page accolades. Nous savons que c'est juste du texte, donc nous n'avons pas besoin de faire comme dot u R L. Parce que ce n'est pas un objet python, pas une classe, donc nous pourrions faire une déclaration else ici. On n'a pas vraiment besoin de le faire. Cela ne se déclenchera jamais car cela ne s'affichera que s'il y a une page interne ou une page externe. Mais nous pourrions faire une déclaration else et lui donner juste un lien vide. C' est Allez-y, nettoyez cela, actualisez notre page, et quand je survole cela, vous pouvez voir en bas à gauche là, il est dit hôte local Port 8000 services barre oblique. Maintenant, nous allons travailler un peu avec cette image. On a quelque chose à faire ici. Retournez à nos mannequins. Nous avons une image de service. C' est aussi une clé étrangère, donc nous savons que la clé étrangère sera comme le numéro un, le numéro 90 ou le numéro 42. Ça va être quelque chose dans ce sens. Django et Wag Tail sont tous deux assez intelligents pour dire, Oh, c'est ce qui va être un numéro. Mais je sais que cela va mapper aux images de queue de wag, l'application et la classe d'image. Donc, même si c'est un nombre quand vous essayez de l'utiliser, je vais chercher l'image avec un I D de quelle que soit cette idée est stockée. Donc je D quatre va chercher l'image avec une idée pour et ça nous donne cet objet. Donc, je vais rendre ce juste huit touch plus petit et avant de travailler avec des images à l'intérieur de attendre un vent pour charger la balise images. Donc, nous chargeons les balises d'images de queue wag, et cela nous permet juste d'utiliser cette balise de modèle appelée Image. Maintenant, allons à l'endroit où nous avons cette image ici. Il est enveloppé dans une photo, donc on peut. Il n'a pas besoin d'être juste au-dessus. Il pourrait être vraiment n'importe où dans ce contenu. Bloquer ce blocage de contenu ici, nous allons dire point de page d'image Qu'est-ce que cette image s'appelle ? C' est ce qu'on appelle une image de service de page d'image de service. Donc, en tant que premier paramètre, nous allons lui donner l'objet image entier. Ensuite, nous allons dire Phil 5 73 par trois, 69 et puis nous allons assigner ceci comme une variable comme appelons juste l'image. Je sais qu'à ce stade, nous avons accès à l'image que nous pourrions faire l'image que vous êtes. L quel que soit ce u r l va être après qu'il soit recadré, il va créer une nouvelle image pour nous image dot title image dot ault, qui est généralement le titre, je crois, et allons de l'avant et nous rafraîchir et nous pouvons voir ici. On a notre première image. C' est la fille. On a le nom ici et on n'a rien pour Ault. Je ne crois pas, en fait étendre corrigé. Je crois que c'est le titre. Allons de l'avant et testons ça. Faisons le titre. Débarrassez-vous de ça. Oui, alors on y va. On a une image. Vous êtes sur le culte de l'image. Allons-y et ajoutons un autel ici. Ault est égal à l'image, pas à un texte alternatif lt. Et là où nous avons notre source d'image, nous allons juste le remplacer par l'image. Vous êtes l image dot u r l Et nous y allons. Nous avons une page détaillée du service. Maintenant, nous n'avons pas d'en-tête ou de pied de page ou quoi que ce soit pour naviguer sur le site, mais nous avons maintenant une page détaillée du service. Une dernière chose que nous pouvons faire est que nous pouvons dire ceci d'utiliser un modèle particulier afin que nous puissions dire, Hé, veuve, nous savons que c'est une page utiliser un certain modèle. Alors supportons juste avec moi. Je vais casser cela, en fait, Donc, c'est vous services slash page de service 40404044 parce que cette page n'existe pas. Sauvegardez ça. Et je vais attendre que mon serveur se recharge. Lorsque j'actualise cette page, vous allez voir que vous obtenez une erreur de modèle n'existe pas. C' est parce que nous lui disons de rechercher réellement la page de service slash de services pour un monde pour l'ensemble pour quatre html et cela n'existe pas. C' est même vous dire exactement où le chercher. Et il n'existe nulle part où il sait où chercher maintenant, je vais spécifier quel modèle utiliser. Maintenant, cela ne va pas changer quoi que ce soit parce que cela aurait été la valeur par défaut. Quoi qu'il en soit, c'est dans les services AP et la page. Si vous deviez prendre ce nom de classe avec un s majuscule et un P majuscule et le transformer en cas de serpent, il ressemble à ceci. Et puis Django suppose juste dot html Donc ce n'est pas nécessaire. Mais j'aime spécifier un modèle de cette façon quand vous travaillez avec du code avec quelqu'un d'autre et que vous voyez une page et vous allez, Oh, où est ce temple ? Vous n'avez pas à chercher, vous savez juste que vous pouvez le mettre en évidence et vous pouvez le rechercher directement dans votre éditeur. Je viens de copier et coller et de le trouver automatiquement pour moi, car le problème est maintenant si nous revenons à notre page de services. C' est si nous cliquons sur ce bouton. Oh, non, la page de liste de services n'existe pas non plus. Et il y a d'autres choses que nous voulons faire dans cette page aussi, comme montrer automatiquement nos services. Dans la prochaine vidéo, on va s'attaquer à ça. 11. Page de liste du service: d' accord. À ce stade, vous chargez votre site Web et vous essayez de montrer votre page de liste de services et admettre interne que c'est cette page pas celle de nettoyage, celle qui vient de dire services et a obtenu un sous-titre. Et actuellement, il n'y a pas de modèle pour cela. Donc, dans cette vidéo, faisons que ce modèle existe. Et puis passons à ajouter un peu de contexte à cela. Cette page est bien, donc j'ai une page de service ouverte, et ce que je vais faire est juste de fermer cette page de liste de services en double et, ah, vous savez, juste se débarrasser de cette trucs ici, et j'ai un petit modèle rapide là-bas. Maintenant, cette page va vivre à l'intérieur de ces dossiers de services à l'intérieur des modèles un dossier, et il est appelé Page de liste de services parce que page de liste de services à nouveau. Si vous prenez toutes ces lettres, faites-les en minuscules. Et puis la deuxième lettre majuscule était en minuscule. C' est ce qu'il cherche. Page de liste de service point html et en fait, nous pouvons. Nous pouvons le spécifier aussi, comme nous l'avons fait avec notre page de service. Nous pouvons venir ici et dire, Hey, utiliser la page de liste de service point html Maintenant, quand nous actualisons notre page ici, nous ne voyons absolument rien ici. C' est parce que notre modèle n'a rien dedans. J' ai tout supprimé, et il montre juste un bloc de contenu vide. Ok, donc j'ai juste collé dans une structure HTML. Tu n'avais pas besoin de me regarder taper tout ça. Mais l'important est que nous allons prendre ce titre de page et le sous-titre et le remplacer . Alors voyons à quoi ça ressemble. heure actuelle, nous avons une page intitulée We Have a Subtitle et dans notre page de liste il s'appelle en fait sous-titre, et nous le savons dans tous les sens. Dites à Paige si je vais à cette définition ici a un champ appelé Titre. Alors quoi ? Nous pouvons y accéder aussi. Donc on a un titre ici. Nous voulons le titre de point de page, et pour notre sous-titre We Want to Do Curly accolade page point sous-titre. Allons de l'avant et rafraîchissons votre page et jetons un coup d'oeil. On y va, dit les services. Voici les services que nous pouvons effectuer sur votre fusée maintenant. Une chose à garder à l'esprit est que ce sous-titre est autorisé à être vide. Cela signifie que lorsque vous modifiez cette page, elle n'a pas besoin d'être là du tout. C' est totalement facultatif. Et donc dans notre modèle, nous disons que même s'il n'y a rien ici, ont encore ce paragraphe prendre. Donc, s'il n'y a pas de sous-titre, c'est ce qui va rendre à notre aller à notre navigateur. Nous ne voulons pas nécessairement que ce ne soit pas seulement une balise P vide, et cela va causer des problèmes d'espacement. Alors allons de l'avant et lançons une déclaration if ici. Si la page point sous-titre et nous allons dans dense que juste pour l'amour de la beauté. Et si et quand nous actualisons votre page, vous verrez que rien ne change vraiment. Mais quand nous voyons notre source ici, s'il n'y avait pas de texte ici, cet élément entier n'apparaîtrait pas du tout. C' est tout ce qu'on fait avec ça maintenant. La prochaine chose que nous voulons faire est d'ajouter des cartes ici, donc fondamentalement, nous voulons prendre si nous retournons ici. Nous avons donc une page de services, et en dessous de cette page nous avons toutes ces différentes pages de service. En fait, on a la bonne. Je vais en créer quelques autres en quelques minutes. Ce que nous voulons faire est de prendre cette page enfant et de l'afficher sur la page de service. C' était deux façons de le faire. Nous pouvons le faire via le modèle lui-même, ou nous pouvons le faire via une méthode de page appelée Get Context. Et c'est comme ça qu'on va le faire ici. On va le faire. La jambe ultra Tell façon, Ok, donc encore une fois, je viens de coller un peu de HTML ici. C' est juste pour la plupart, c'est bootstrap standard avec quelques styles supplémentaires que j'ai ajoutés. C' est tout à l'avant et les atouts. Si vous n'avez pas les ressources du projet, vous pouvez toujours les télécharger pour ce cours. Ils s'appellent Rocketman assets dot zip. Et donc si je retourne à ma page et que je rafraîchis ça, nous allons voir la carte standard. Donc, nous avons une image, un titre de carte de description et un lien, et ce que je veux faire ici est avant tout, je veux vraiment voir à quoi cela va ressembler avec plusieurs éléments ici. Alors faisons quatre I en 1234 Et ce que cela va faire est de faire une boucle sur chaque numéro. Donc, cela va me donner et pour Donc cela va me donner quatre cartes et encore que juste pour chaque oeil en corde 1234 Et quand je rafraîchis me donne quatre cartes ici et ceux-là sont en fait tous sur leur propre Roe et ce n'est pas ce que je voulais. Je voulais en fait que tous ces éléments soient dans leur propre ligne de bootstrap et leur permettre de s'envelopper à quel point cela semble beaucoup mieux. On y va. Maintenant, nous avons quatre cartes ici, donc nous voulons faire ça. Donc, s'il y a un service de nettoyage ici, s'il y a un autre service ici pour d'autres services, nous voulons les remplir automatiquement avec une image de la page de service. C' est un détail de service Page sur laquelle nous venons de travailler dans la dernière vidéo avec son titre, sa description et c'est Lien et naturellement, son image. Donc, ce que nous allons faire est que nous sommes francs, un second vêtement qui n'a pas besoin de cela dans sa page de liste de service, Nous allons écraser une méthode appelée Get Contact donc c'est def get underscore contexte. Il va prendre l'auto-demande tous ses arguments positionnels réguliers, et ce sont des arguments de mots-clés. Et ici, ce que nous devons faire est de dire, Hey, obtenez le contexte régulier de notre page. Donc le contexte est, Ah, vous savez où nous voyons en raison de faire pour faire Revenons ici nous voyons Curly Braces page titre point , pas sous-titre. Tout est dans le contexte de notre modèle. Et donc ce que nous allons faire est d'y ajouter un peu plus, quelque chose qui ne vient pas automatiquement simplement parce que nous avons un nom de champ. Nous voulons créer des choses supplémentaires, donc nous allons utiliser cette méthode, et ce contexte est égal à va exécuter une super fonction de classe super, plutôt obtenir le contexte et nous allons passer dans nos oeufs de chœur d'oeufs et la demande et contexte de retour. Et ce que cela va à dio quand nous rafraîchissons votre page n'est absolument rien que nous pouvons voir maintenant qu'elle est rafraîchie. Rien n'a changé, mais allons de l'avant et faisons un petit exemple ici. Faisons le contexte. Bonjour et ça va être bonjour monde. Et maintenant, je vais avoir accès à une variable dans mon modèle appelé Bonjour toutes les lettres majuscules , parce que c'est comme ça que je l'ai écrit ici. Et si je fais ça un g l l o. si je sauvegarde cela et aller rafraîchir ma page Bonjour monde. Il apparaît comme un contexte complètement personnalisé, et nous pouvons jeter tout ce que nous voulons là-dedans. Maintenant, je vais me débarrasser de celui-là, parce que ce n'est pas un exemple utile. C' est juste un exemple de la façon dont nous pouvons fondamentalement mettre tout ce que nous voulons dans notre contexte. est ainsi un rapide état des lieux. Nous avons essentiellement dit, Hey, à la page est livré avec une méthode appelée Get Context. Nous reconnaissons que nous allons écrire exactement la même fonction, exactement la même méthode que nous allons appeler les vieux trucs. C' est le truc qui vient avec Paige. C' est ce que fait Super, dit Super. Fondamentalement, appelez Paige, ne comprenez pas le contexte. Nous allons passer tous les arguments que nous aurions normalement, et ce sera le contexte standard. C' est ce que la page aura par défaut. Puis on a dit : «  Hé, Hé, ajoutez un peu de plus là-dedans. Je n'ai pas orthographié le monde non plus. C' est hilarant alors. Une fois que nous avons ajouté cela là, juste retourné le contexte. Et c'est ainsi que nous avions une variable à notre modèle. C' est la façon de le faire par Django. Et parce que c'est la boisson loin. C' est aussi la voie Wag Tail. Donc, maintenant, ce que nous pouvons faire est que nous pouvons dire que les services de contexte sont égaux à, et nous devons juste obtenir toutes nos pages de service maintenant de façon à obtenir toutes nos pages de service . Comme nous avons une classe ici appelée Service Page et Django, nous pouvons utiliser leur O. R M leur gestionnaire relationnel d'objet, objets point de page de service, et nous pourrions tout faire et cela va obtenir toutes les pages. Mais ce n'est pas ce que nous voulons parce que nos pages Wang disent ont un statut, ils peuvent être un brouillon. Ils pourraient être en direct, ils peuvent être publics, ils pourraient être privés, donc nous voulons nous assurer que nous utilisons dot live et dot public, et ce que cela fera est qu'il saisira chaque page qui est actuellement en direct et public et le jeter dans une variable que nous pouvons boucle sur les services appelés. Alors faisons ça. Débarrassons-nous de ces quatre boucles ici. Eh bien, pas vraiment s'en débarrasser. Faisons juste ce quatre je dans les services et nous allons étape par étape faire cela fonctionne de façon incrémentielle . Maintenant, quand je rafraîchis la page parce que je n'ai qu'une seule page de service ici, c'est la page de service ici. Juste parce que je n'en ai qu'un. Cela ne s'affichera qu'avec une seule carte comme ça. Que se passe-t-il si je duplique cette page ? C' est copier cette page et lui donner un éclat. C' est ce que va être cette nouvelle page de service. Dois-je changer autre chose ici ? Allons de l'avant et changeons son image et je vais en charger une nouvelle, accord ? Et publions simplement cette page. Maintenant, quand j'actualiserai cette page, j'aurai deux cartes ici. La raison pour laquelle je dois le faire est qu'il y a deux de ces pages. Et si j'ai dit hé, en fait, inédite le nettoyage. Oui, je veux annuler le nettoyage. Maintenant. Attends Till dit, oui, ok. Je crois comprendre qu'il y a, en fait, certaines de ces pages. Mais un seul d'entre eux est techniquement en direct, donc ne montrer qu'un d'entre eux. Et c'est pour ça qu'on voit la seule carte ici. Maintenant, je vais juste republier sa page, donc nous avons les deux cartes. Et maintenant, allons de l'avant et changeons chaque morceau de ceci. Donc, dans notre éditeur, je vais dire, pour chaque carte en service ISM dans une carte d'appel. La chose la plus simple que je peux changer ici est le titre du point de la carte de titre, et si nous revenons à nos modèles ici Modèles, modèles, modèles, nous saisissons toutes les pages de service. Nous avons donc maintenant accès à tous les champs disponibles dans une page de service. Nous avons maintenant accès à la description, alors saisissons cette description et remplacons cette description par point de carte. Maintenant, d'où est-ce que je reçois la carte ? Eh bien, parce que les services sont, c'est une liste de la page de service essentiellement. Nous allons parcourir chaque carte parce que nous allons créer des cartes à l' avant . Et donc, pour chacune de ces pages, une de ces cartes, nous avons accès au titre et à la description comme une page régulière . Alors allons de l'avant et sauvegardons ça et donnez-nous un rafraîchissement et nous pouvons voir que nous avons nettoyage brillant. Nous avons une alarme ipsum là-dedans, et maintenant nous devons changer l'URL et l'image. Bon, alors on va faire l'image d'abord. Je vais juste être le plus grand qui va à la plus drôle. Nous devons nous assurer que nous avons des images wag tail, des tags chargés, que nous sommes actuellement dio, et allons de l'avant et créons une nouvelle image ici. On va dire carte image. Et puis comment s'appelle ce champ ? Ça s'appelle Service Image. Pour lui donner une image de service, nous allons dire Remplir avec 5 73 par 369 comme image de carte. Et puis, comme dans notre dernière vidéo, nous pouvons utiliser l'image de carte point u R l. Nous pouvons aussi lui donner un autel, ce qui est toujours une bonne idée, même s'il est vide. Garde l'image point un lt pour le mot culte. Et regarde ça. Cela commence à se réunir maintenant lorsque nous cliquons sur ceci, cela ne va pas vraiment aller nulle part et vous pouvez voir en bas à gauche de mon écran. Ça dit de le faire, alors on va arranger ça. Maintenant, nous savons que chaque carte a une page. Eh bien, parce que c'est tout ce que c'est c'est un objet de page. Nous venons de le renommer en carte pour cette boucle. Donc nous allons faire pour chaque carte, générer une carte. Tu es l On va mettre la fille ici aussi, et on va aussi la mettre ici. Donc, fondamentalement, quand quelqu'un clique n'importe où dans cette image de texte de carte ou le lien va les amener à la bonne page. Alors on y va. Je rafraîchis la page. Je clique sur Nettoyage m'amène à la page de nettoyage. Je clique en arrière, Click Shining m'amène à la page brillante et nous y allons. Tout comme ça, nous avons une page de liste de services, et pour chaque nouvelle page que vous ajoutez, elle apparaîtra automatiquement ici. Il va juste continuer à les ajouter. C' était un résumé très rapide. Voici ce que nous avons fait dans cette vidéo. Nous avons ajouté le sous-titre de la page de titre de la page Nous vérifions si le sous-titre de la page existe même. En fait, il y a une autre chose qu'on devrait faire, c'est. Y a-t-il une description ? Eso. Ensuite, nous avons dit, Hey, nous allons ajouter des trucs personnalisés dans le contexte de notre modèle. Alors nous avons ajouté, je reçois la méthode contextuelle. Nous avons dit, Hey, prenez les trucs réguliers qui attendent de toujours nous donner et puis ajoutez des trucs supplémentaires dans votre Ceci est en utilisant Django Zo R M Donc nous saisissons toutes les pages de service ont été en sorte que toutes les pages de l'air en direct et public, et nous les ramenons simplement au contexte. Ensuite, dans notre modèle, où le contexte est injecté, nous pouvons parcourir chaque service en boucle. On l'a appelé carte. Donc, pour chaque itération, nous l'appelons carte, nous avons créé une image, lui donner un titre ou affiché le titre, affiché la description et lui a donné votre l. C'était une dernière chose que je n'ai pas fait est que j'ai oublié que le service la description de la page est, en fait, facultative. Nous avons donc la description de la page de service. vide est égale à true. Il est un champ facultatif, donc nous allons dire si la carte cette description et simplement se terminer si maintenant il ne va pas changer l'affichage parce qu'ils ont une description. Mais s'il n'y en avait pas, il n'y aura pas une balise de paragraphe vide et son modèle d'objet de document dans sa page HTML. Et ce n'est qu'une des façons dont nous pouvons créer une page de liste et répertorier toutes les pages enfants en dessous, comme nous l'avons fait ici. Il y a d'autres façons de le faire, mais c' est de loin le plus simple. 12. Ajouter la valorisation de page: jusqu' à maintenant, nous avons ajouté quelques champs dans nos pages de service appelées Page externe et Page interne. Et ce que nous disons essentiellement sur le modèle, c'est, s'il y a une page interne, utilisez-le, vous, Earl, ou s'il y a une page externe, utilisez ce texte et c'est maintenant un bon moment pour ajouter une validation de page. Donc si ces deux air sont remplis, nous allons ajouter une petite erreur qui dit, Hey, un seul d'entre eux peut être rempli à tout moment. Donc, je vais ouvrir mon éditeur et dans mon fichier dot pie de modèles de service. Et si je ferme, nous pouvons réellement voir où c'est des services, puis des modèles dot pie. Nous allons ajouter une autre méthode ici appelée Clean. On va dire, Définir propre qui va prendre super propre, et ça va juste faire son nettoyage régulier. Donc, chaque fois que vous ajoutez du contenu à la page juste pour échapper à votre contenu afin que nous puissions, vous savez être entré en toute sécurité dans votre base de données et vous n'avez pas à vous soucier des injections SQL et des choses comme ça. Maintenant, ce que nous allons faire ici, c'est dire, si quelque chose de cause et d'erreur, c'est vraiment tout ce que nous faisons à ce sujet. Donc, si vous gardez cela à l'esprit ces deux lignes à l'esprit, c'est en fait assez facile. Donc, nous pouvons dire si Self dot page interne et auto-point page externe les deux champs sont remplis , et c'est en fait savoir ce que nous voulons. Nous ne voulons pas que les deux champs soient remplis. Nous voulons seulement un de ces éléments à remplir, et cela aide à guider vos utilisateurs de contenu à faire fondamentalement les bonnes choses. Je ne le remplit pas aux deux endroits parce que ça pourrait être déroutant. Et si quelqu'un d'autre venait sur ta page et disait, Hey, il y a un lien ici, rien ici qui va être utilisé ? Je ne sais pas, mais ça va faire, c'est de te jeter une erreur et de dire, Hey, qu'un seul d'entre eux pourrait être utilisé à un moment donné. Alors maintenant, allons de l'avant et ajouter une erreur Donc nous allons soulever une augmentation exceptionnelle et erreur ici, donc c'est à peu près tout jangle à ce stade. Nous allons déclencher une erreur de validation et nous allons lui donner un dictionnaire, et le 1er 1 sera quel que soit votre nom de champ. Donc, ce que cela dit est, s'il y a, en fait, une page interne et une page externe, c'est cette déclaration si ici, nous voulons jeter un air sur l'un de ceux-ci ou les deux. Donc je vais d'abord lancer de l'air sur le champ interne de la page. Donc, ce sera la clé de la première valeur de dictionnaire ici. Et encore une fois, je vais donner. C' est juste une zone de validation de plus. C' est un peu bizarre que nous nichons ça. Mais c'est tout ce qu'on fait ici. Et nous pouvons dire à ce stade s'il vous plaît seulement sélectionner une page quatre, Entrez un externe, vous êtes l. Donc maintenant c'est tout bien et dandy. Mais si tu vas vraiment enregistrer cette page, tu vas rencontrer un problème. Nous devons importer de l'air de validation. Nous ne l'avons pas encore utilisé et nous ne l'avons donc pas encore importé. Revenons au haut de notre page ici. Maintenant, nous allons faire à partir de Django decor dot Exceptions, importation validation. Erreur. C' est tout ce qu'on fait. Je vais glisser vers le bas pour nettoyer ça un peu. Enregistrer le point de décoration Django L'exception n'existe pas. C' est parce que c'était une cassette ou un manque de faute de frappe. C' est Django. D' accord exclut les exceptions. On y va. Maintenant, allons de l'avant et essayons d'enregistrer cette page. Que se passe-t-il quand j'essaie de sauvegarder un brouillon ? Cette page n'a pas pu être enregistrée en raison d'erreurs de validation qui semblent bien. Ça a l'air bien. Et voici le texte exact que j'ai écrit. Veuillez sélectionner uniquement une page ou entrer un euro externe. Non, il n'y a pas d'erreur ici, mais on peut en ajouter une très, très facilement. Alors allons-y. Faites défiler ici et je vais le rendre juste un peu plus petit. Taille correspond à une ligne C'est beaucoup trop petit, et je ne suis pas une copie et coller cela parce que tout ce que nous avons besoin de dio est changer le nom du champ, et je suppose que nous devrions avoir une virgule là-dedans parce que c'est un dictionnaire. Donc, c'est la première clé avec le premier message aérien, et c'est la deuxième clé avec le deuxième message d'erreur, et ce texte, en aucun cas besoin d'être exactement le même. Alors faisons juste que ce que les morts je vais sauver ça et vous verrez que le premier air va dire quelque chose de très poli. Et la deuxième erreur va avoir un tas de maladies. Il y a des annonces dedans et va dire exactement le même texte après. Allons de l'avant et sauvegardons le brouillon. La page ne peut pas être enregistrée. Vous faites des airs de validation et s'il vous plaît sélectionner une page ou entrer un externe vous bien, et dans le 2ème 1 ci-dessous, nous avons dit que que ce que ce mort s'il vous plaît seulement sélectionner une page ou entrer un externe vous Earl. Donc maintenant, nous avons deux erreurs pour la validation de base. Donc je vais nettoyer ça parce que je n'aime pas toutes ces têtes là-dedans. Ça n'a pas l'air très sympa. Il a même jeté ça dans une variable pour vraiment nettoyer ça. Et maintenant, à ce stade, tout ce que nous avons à faire est, disons, allons nous débarrasser de Space X. Nous ne voulons pas nécessairement lier à Space X. Sur quelle page sommes-nous sur le nettoyage page ? Alors allons-y et publions simplement ceci maintenant et cela fonctionne. n'y a plus d'erreurs de validation. Il nous permet en fait de sauvegarder la page, ce qui est vraiment, vraiment bonnes nouvelles, parce que jusqu'à ce point nous pouvons ajouter un interne et un externe vous Earl. Maintenant, disons que chaque page doit avoir l'un ou l'autre dit Allez-y, effacez ce choix. n'y a pas de page interne et il n'y a pas de page externe et il est parfaitement enregistré. Ce qu'on pourrait dire maintenant, c'est que je vais juste agrandir encore un peu, si ce n'est la page interne. Donc, s'il n'y a pas de page interne et pas de page externe, donc il n'y a pas de page interne et il n'y a pas de page externe, nous pouvons aussi soulever un air ici. Alors allons de l'avant et soulevons une erreur de validation. Ça va être un dictionnaire. Et encore une fois, ça ressemble à ça. Nous avons une clé avec erreur de validation, puis une seconde clé avec un autre air de validation. C' est vraiment tout ça. On dirait que nous voulons mettre ces clés comme les pages internes et externes et que l' air de validation va être. Vous devez toujours sélectionner une page ou entrer un Earl externe et je ne suis pas une copie qui cause que j'aime ce libellé et c'est assez bon pour les deux champs avec lesquels je travaille. Donc je vais sauver ça. Et maintenant, quand nous sauvegardons nos pages à la recherche de deux choses, si ces deux sont remplis d'air, alors ça va causer une erreur. Ça va jeter de l'air de validation. Et si aucun de ces air ne s'est rempli, il va aussi jeter de l'air de validation. Alors allons de l'avant et économisons le projet. Hé, regarde ça. La page n'a pas pu être enregistrée en raison des airs de validation. Vous devez toujours sélectionner une page ou entrer un Earl externe dit la même chose ici. Texas Nice et lire votre champ de texte lui-même est agréable et rouge, sorte que les gens d'entrée de contenu les gens savent exactement ce qui a mal tourné. Maintenant, je vais choisir n'importe quelle page. Ah, et je vais en fait choisir la page d'accueil publiée, et elle publie parfaitement bien et donc finalement, est tout ce que nous faisons pour ajouter une erreur de validation pour nos champs de page. Donc, nous avons une page ici appelée Page de service, et nous voulons nous assurer qu'il y a toujours un ensemble de pages internes ou externes, et qu'il n'y en a qu'une seule en cours de définition à un moment donné. 13. Ajouter un en-tête et un pied de: si nous regardons notre page en ce moment, elle semble vide. Nous avons des services, Page, Nous avons des pages détaillées de service et nous avons une page d'accueil, mais nous n'avons aucun moyen de nous déplacer. La page d'accueil a une belle bannière. C' est cool, mais il n'y a pas d'en-tête ou de pied de page. Alors comment va-t-on se déplacer ? Allons de l'avant et ajoutons un en-tête global et un pied de page global à notre site Web Wag Tail. Donc, les premières choses d'abord. Je vais fermer ça et ouvrir le point de base html et qui vit à l'intérieur de notre dossier Rocket Man et à l'intérieur du sous-dossier appelé Templates. Maintenant, ici, je vais simplement dire, inclure un fichier inclut le point d'en-tête html et c'est tout ce que je vais à dio et en dessous de tout mon contenu, je vais simplement inclure un point de pied de page html. Maintenant, cela va chercher des fichiers de modèle. Il s'agit d'un fichier modèle. Nous travaillons avec le dossier de base, et il va regarder à l'intérieur de notre dossier de modèle qui est juste ici pour un autre dossier appelé Incluts, puis un fichier appelé En-tête. Et puis il va aussi regarder à l'intérieur du dossier include une fois de plus pour un fichier appelé Pied de page Maintenant si nous nous sauvegardons et nous actualisons notre page, oui, modèle n'existe pas. Nous l'avons vu avant, et cela vous dit en fait qu'il est à la recherche d'un modèle. Ainsi, dans le dossier des modèles ou dans l'un de ces dossiers de modèle pour un certain dossier appelé Incluts et un fichier appelé Point d'en-tête html. Alors allons-y. La création d'un nouveau dépôt inclut le point d'en-tête html. Donc, je viens de créer un dossier et un fichier, et je vais aussi aller de l'avant et créer un point de pied de page html et ce étaient des fichiers totalement vides . Rien là-dedans. Donc, à ce stade, nous n'avons effectivement rien fait à notre site Web. Donc, si nous ouvrons le point d'en-tête html, nous pouvons avoir fondamentalement n'importe quoi. Alors faisons ça. Div. C' est ah, en-tête Cool. Ça va apparaître sur chaque page. Donc, si je vais aux services de barre oblique, c'est un en-tête. affiche là-haut, allez à une page détaillée du service, il apparaît toujours. C' est toujours là, alors faisons en sorte que ça ait l'air sympa. Faisons en sorte que cela ressemble à une bonne navigation. D' accord ? Donc tout ce que j'ai fait ici, c'est que j'ai pris une navigation de get bootstrap dot com et je l'ai injecté ici. J' ai fait une petite chose. J' ai ajouté un lien. Ce n'est même pas un vrai lien, et je nous ai donné un parent lié à notre logo. C' est ça. Donc, quand je vais rafraîchir votre page, nous allons voir que nous avons en fait le logo Rocketman et un seul lien, et cela va apparaître à nouveau sur chaque page. Alors que j'appuie sur le bouton de retour, actualisez celui-là. On y va. Je suis sur la page des services. Je peux aller à n'importe quelle page détaillée, et cet en-tête est toujours là. Maintenant, il y a deux choses que nous voulons faire ici. Tout d'abord, nous voulons ne pas lier directement à Static. Vous pourriez voir cela dans d'autres attendre jusqu'à ce que les projets que vous pourriez même voir ceci. Un autre projet Django où les gens se lient directement au dossier statique, et pour beaucoup de raisons, c'est en fait OK. Mais pour certains sites Web, vous ne voudrez peut-être pas que votre dossier statique soit appelé statique. Vous voudrez peut-être que ce soit quelque chose de différent. Je ne sais pas pourquoi vous le changeriez, mais certaines personnes veulent juste qu'il change donc Ce que nous allons faire est d'utiliser la balise de modèle statique , et nous allons simplement donner une chaîne et dire, Hey, partout où statique est si nous changeons cela maintenant ou si nous le changeons à l'avenir, partout où ce dossier est jangles va comprendre où c'est le sous-dossier images dans le dossier statique à nouveau, nous ne savons pas où c'est, donc c'est très relative à ce stade et le logo du fichier point PNG Maintenant, pour faire ce travail, nous avons en fait une charge ici. Donc, nous allons charger la balise statique. Et quand nous actualisons votre page, rien ne change. Et même si nous regardons la source ici, il semble exactement la même barre oblique statique images slash logo point PNG On dirait que rien n' a changé, mais en production, par exemple, si vous devez attendre dot io et nous faisons un clic droit et inspectons ici, vous pouvez dire oui. Cela utilise aussi statique. Ils auraient pu utiliser n'importe quel autre dossier. Ils ont un sous-dossier appelé Image, mais les empreintes digitales sont activées. Ainsi, chaque fois qu'ils collectent statique chaque fois qu'ils avaient plus d'actifs sur le site Web. Vous allez obtenir un hachage aléatoire et efficacement ce que cela fait. Est-ce que c'est des cash-busts, tous vos actifs , tous vos CSS, vous tous, JavaScript, toutes vos images. Donc, c'est si vous utilisez les trois d'Amazon ou les espaces océaniques numériques ou tout ce qui pourrait avoir encaissé est immédiatement cassé. Et c'est pourquoi, typiquement, nous aimons utiliser statique. Donc, il y a des avantages, Vraiment ? L' autre chose que j'ai fait, c'est que j'ai ajouté un Lincoln ici. Donc si je retourne à notre page, j'ai juste un lien, et ce que je vais faire ici, c'est que je vais faire une autre boucle. Donc pour moi en 123 je veux juste trois de ces articles. Et donc j'ai juste fait un peu de bosses et j'ai ajouté la fin de quatre étiquettes là-dedans. Allons-y. Annonce moi aussi. Ce sera notre menu à l'avenir. Donc, pour chaque oeil, pour chaque entier dans 123 montrer lien un lien vers le lien trois. Et comme ça, nous avons Lien un lié à la liaison 3. S' il vous plaît, n'allez nulle part. Nous pourrions les coder en dur si nous le voulions, mais nous ne savons pas vraiment si notre futur client ou futur Selves va maintenir ces liens. Donc, par exemple, je pourrais dire que Link un va toujours aux services de barre oblique. Mais que se passe-t-il si un jour je vais à ma page de services et je dis que je ne veux pas qu'on l'appelle services ? Je voulais qu'on m'appelle les services d'entretien des fusées. Et peut-être que c'est juste mieux pour S e o. Eh bien, tout d'un coup, mon lien qui va vers les services slash, cette page va se briser, donc nous ne voulons pas le faire non plus. Je ne vais pas dire ça. Je vais garder cet ajout de services et c'est comme ça que nous ajoutons un en-tête. Et ensuite, je vais ajouter un pied de page. Donc si nous retournons à notre base, nous avons un pied de page inclus. Mais notre page de pied de page n'a actuellement rien dedans. Ok, donc encore une fois, je viens de coller Ah, modèle, pied de page ici. C' est un tas d'e-mails et d'autres choses. y a en fait rien qui se passe ici, sauf qu'il y a un orteil de boucle pour créer de faux liens à nouveau, comme nous l'avons fait dans l'en-tête et ah oui, c' est à propos de ça. Alors allons de l'avant et jetons un coup d'oeil à cela juste comme un aperçu rapide. Donc je vais me débarrasser de ce défilement vers le bas, et j'ai juste rafraîchi ma page et on y est. On a une vision globale, texte là-dedans, un bouton qui finira par aller quelque part. Je suppose que les icônes des médias sociaux heures à faire est des liens 12 et trois. Et donc ce sont toutes des fonctionnalités que nous allons ajouter un peu plus tard. Mais pour l'instant, il est juste agréable de savoir que nous commençons à créer un site Web qui ressemble quelque chose en fait à un site Web. Au moins, je peux accéder à la page d'accueil à partir de n'importe quelle page à ce stade et dans les leçons futures , nous allons ajouter un en-tête approprié ici. Ah, bonne navigation. Nous allons donc créer des éléments de menu. On va en créer trois là-dedans. Nous allons ensuite copier, cependant, cependant, donc ils font également une boucle à travers les liens et créent exactement les mêmes liens ici. Nous allons ajouter des paramètres de site Web global pour le contact avec nous pour les heures pour les paramètres des médias sociaux pour les liens. Nous allons nous assurer que cela est personnalisable. C' est personnalisable, invisible. Et cette page à faire bouton fait fait des liens vers une page appropriée. Donc on va arriver à tout ça en bas de la route. Mais pour l'instant, nous allons juste le garder ici comme espace réservé. 14. Ajouter des outils de débogage: OK, Notre site Web commence à devenir assez complexe pour que nous devrions probablement commencer à envisager quelques outils de débogage, quelque chose qui va nous aider le long du chemin à comprendre les choses. Trouve s'il y a un problème qu'on n'a pas vraiment rencontré, mais ça va nous aider sur le chemin. Donc nous allons installer deux choses. Le 1er 1 que nous allons installer va créer un nouveau fichier ici va s'appeler Django Debug Tool are, et le 2ème 1 va s'appeler P You d Be. Et c'est un bogueur interactif python. Donc c'est un peu mieux que le bogueur D. C' est un outil. J' aime ces deux air totalement optionnel. Si vous avez de meilleurs outils de débogage que vous préférez utiliser, utilisez certainement ceux-ci. Mais ces air à ça. J' adore ça. J' ai à peu près mis sur chaque projet juste parce que cela m'aide énormément. Allons-y, ouvrons notre terminal et annulez notre serveur. Et pendant que nous sommes à l'intérieur de notre environnement, donc quel que soit l'environnement virtuel que vous utilisez, ce soit Pippen ven vor v envy docker, vagabond, quelque chose comme ça. Assurez-vous simplement que vous êtes à l'intérieur de votre environnement et tapez Pip. Installez Django Debug barre d'outils et vous pouvez voir que la barre d'outils Jingo Debug a été installée avec succès . Version deux points une fois vous permet pip montrer le débogage Django à une barre, et cela va nous donner les versions réelles. On a un nom ici. C' est notre nom. Et nous avons aussi une version qui est 2.1 si cool Nous avons que installé dans un environnement virtuel . Maintenant, la première chose que nous voulons faire est que nous voulons ouvrir les exigences dot txt Bien sûr, tout ce qui est là, allons de l'avant et créer un nouveau fichier offre celui-ci appelé dev dot txt et supprimé. La raison pour laquelle nous l'avons fait est parce que je veux dev dot txt et les exigences dot txt toe vivent uns à côté de l'autre dans notre répertoire de projet afin que vous puissiez voir que j'ai des exigences sur txt dans le même dossier. J' ai dev dot txt Maintenant, ce que nous allons dire dev dot txt interne nécessite le fichier txt d' exigences et en dessous, nous pouvons mettre Django debug Toolbar est égal à la version 2.1. Alors maintenant, quand vous dépensez un nouveau projet. Au lieu de faire pip install, délimitez nos exigences comme ce que nous faisons habituellement pour un nouveau projet. Vous pouvez faire Pip Install Dash sont dev dot txt et il va installer vos exigences de base, mais aussi les exigences de développement, telles que le débogage à une barre ou P. Vous d être Non, mais l'installe dans notre environnement virtuel. Mais ce n'est pas réellement installé dans notre projet. Alors allons de l'avant et fermons ça et ça et ouvrons le dev dot pie. Ce sont donc nos paramètres de développement. Nous pouvons ajouter nos propres paramètres de développement et ici, ou nous pouvons les remplacer avec tous les paramètres locaux que nous voulons dans un fichier de tarte de points local. Je vais juste les jeter ici parce que quand je commet ça, je veux que les autres aient exactement les mêmes changements. Souvent, nous ne commettons pas vraiment les fichiers élevés DUP locaux ou les fichiers locaux juste parce que c'est un peu plus de modification que vous devez faire pour faire fonctionner le projet sur votre ordinateur. Alors que je veux que tout le monde ait le, donc je vais mettre ça dans le fichier dev dot pie maintenant. La première chose que je veux faire est que je veux ajouter ceci à mes points d'accès installés. Faisons APS installé et cela vient de la base dot pie. Donc, si nous ouvrons sur la base de pie online 26 jusqu'à la ligne 52, nous avons nos points d'accès installés . Donc, en gros, on dit , Django, utilise les paramètres de base C'est cool. Et aussi saisir vos points d'accès installés et y ajouter du Maurin. Alors allons de l'avant et faire Plus est égal. Et jetons une liste d'éléments ici, et cette liste va être barre d'outils de débogage. Et à ce stade, nous pouvons réexécuter son serveur si nous voulons voir si quelque chose se produit une sorte d'erreur. Regarde ça. Et il dit, Hé, Django, Django, barre d'outils de débogage Middleware est manquant. Nous devrions ajouter cela à notre middleware. Ok, allons de l'avant et ajoutons cela à son milieu où maintenant tout cela peut être trouvé sur la barre d'outils de débogage jangle. Lisez-moi les instructions. Donc, si vous allez à, je pense que c'est ah, lisez les docks ou le point de la barre d'outils de débogage de Django Lire les docks. Un Google rapide vous dira exactement où il est. Il vous dira exactement comment installer ceci. C' est vraiment juste que je fais la plupart de cela à partir de la mémoire ici, alors faisons-le middleware. Et encore une fois, ajoutons à notre middleware, et nous allons donner à cela une liste de ce middleware de barre d'outils de débogage. Qu' est-ce qui se plaignait de celui-là, ici ? Nous voulons sélectionner tout cela et le coller là-dedans. C' est ce qui se plaint, et enfin, c'est bizarre. Mais Django Debug Toolbar nous oblige à donner une sorte de I p interne qui est autorisé à utiliser. Et pour cela, nous voulons juste utiliser 127.0 point 0.1. C' est votre hôte local Enregistrer. Allons voir notre terminal. Tout a l'air bien dans le terminal. Et actualisons notre page ici et à ce stade, vous ne pouvez pas le dire, mais cela essaie de fonctionner. Nous avons encore un pas à faire ici, mais ça essaie vraiment de marcher. Donc, en général, nous allons voir une petite icône de Django ici, et ça va être notre outil de profilage. Donc la dernière chose que nous devons faire est d'ouvrir notre tarte à pois ou à toi et ça vit sous Rocket Man. Ici, nous avons un dossier Rocket Man, juste à côté de la configuration statique et des modèles. Nous avons un fichier appelé vous URL dot pie et ici nous voulons essentiellement ajouter des RL supplémentaires afin que la barre d'outils jangle debug soit autorisée à vous montrer ce qu'elle veut vous montrer . Alors, allons ici en raison de faire pour faire des réglages. Nous allons dire, si le débogage des paramètres est vrai, cela signifie que nous développons localement. débogage n'est vrai que lorsque vous développez localement. Une fois que vous allez dans la production, vous auriez dû démystifier gagné. Souvent, vous poussez Engine X ou un autre type d'application servant vos fichiers statiques. Mais pour l'instant, c'est bon. Importons la barre d'outils de débogage, et nous n'avons pas besoin de faire quoi que ce soit avec ceux-ci. Et continuons simplement et ajoutons la barre d'outils de débogage aux modèles de rul. Encore une fois, cela ne va se manifester que pour notre développement local. Donc, vous êtes tous les modèles, est égal à vos anciens modèles, et nous allons le remonter d'une manière différente. Ajoutons des motifs Uriel à la fin. Vous êtes des modèles L est égal à ce que la liste est plus modèles neuronaux existants. Mais ce chemin souligne. Soulignement de débogage de soulignement. Barre oblique de soulignement. Et puis incluons le débogage à une barre que vous ou bien maintenant qui va casser parce avons probablement pas de chemin ou d'inclusion installé ou inclus de la bonne façon. Il est probablement installé pour venir sur le Django, mais il n'est probablement pas importé comme nous nous attendons à ce qu'il soit importé. Alors remontons au sommet. Avons-nous Django vous ou bien nous avons confiance que vous êtes d'autre, mais nous voulons de django dot urals import Inclure dans le passé. Ok, revenons en arrière et rafraîchissons notre page et elle n'apparaît toujours pas, donc j'ai évidemment fait quelque chose de mal. Revenez au middleware APS installé dev dot pie installé. Je p est non, qui était censé être installé. Non. l'œil interne. Allons de l'avant et donnons cela un rafraîchissement et a ah, il est là. Donc c'est Ah, je suppose un peu bizarre. Je veux dire, il y a quelques étapes, mais encore une fois, tout est documenté dans cette vidéo ou dans la barre d'outils de la jungle Lire le site Web des Canards . Donc, ici, nous avons la barre d'outils de débogage jangle. Il nous indique la version que nous utilisons le temps de traitement nous montre ou les paramètres. Combien de requêtes SQL. C' est un gros problème parce que vous travaillez avec un système de gestion de contenu. Vous pouvez finir par ballonner cela pour être beaucoup, idéalement, idéalement, tirer pour moins de 100 requêtes si vous le pouvez. Si vous voyez un site Web qui a 1000 requêtes, quelque chose doit certainement changer. C' est, c'est terrible. Combien de fichiers statiques utilisons-nous et revenons réellement aux requêtes SQL ? Nous pouvons voir ceux qui ont été courus ici. C' est plutôt cool Weekend Dis, Hey, explique-toi et ça le fait. Ça nous dit ce qui se passe. C' est assez soigné pour que nous puissions voir nos fichiers statiques. Nous pouvons également voir nos modèles ici. Nous avons rendu 13 modèles, donc nous avons une meilleure page de liste de services. On sait d'où ça vient. C' est vraiment utile. Quand vous avez commencé un projet existant et que vous êtes comme, Oh, où est ce modèle ? D' où viennent ces modèles ? Je ne sais pas d'où ils viennent. Cela vous dira exactement ce qui vient. Cela provient de la page de liste des services barre oblique. C' est plutôt cool. Nous savons qu'il utilise basé sur HTML. Il y a un tas de trucs Wag Tail ici. Donc, il utilise la barre de l'utilisateur plus de poids dire choses hommes, et nous avons une inclusion pour l'en-tête et inclure For Our Footer était de nous dire toutes sortes de choses, même nous dit ce qui se passe avec l'encaissement et les signaux et la journalisation et tous ce bon truc . C' est donc un outil de profilage complet. Les plus gros assistants ici sont vos requêtes SQL et vos modèles. Si vous avez un site qui se charge vraiment, vraiment lent ou que vous ne savez pas d'où provient un modèle ou d'où proviennent certaines données dans un modèle particulier, cela va vous aider énormément. Donc, c'est à un outil numéro un. Le numéro deux s'appelait P, tu seras. Alors revenons ici. Celui-ci est en fait super facile à installer, donc nous faisons Pip installer P vous d être. Allons de l'avant et faire pip montrer p vous d Be et il utilise 2019 point pour aller de l'avant et redémarrer notre serveur avec Python Men Shop. Je cours le serveur 0.0 point 0.0 cool et 8000 et nous pourrions fermer tous ceux. Et ouvrons à nouveau dev dot txt. Et mettons P D. B est égal à égal à 2019 point aussi. Donc, nous verrouillons la version de PDB que nous utilisons dans notre projet dans les exigences de développement seulement . Et pour celui-ci, c'est littéralement tout ce que nous devons faire. Alors donnons un coup de feu à celui-ci. Allons aux modèles de service et pour activer celui-ci, c'est super facile. Vous le jetez où que vous soyez, ayant des problèmes quand vous en avez besoin. Vous devez déboguer quelque chose et vous tapez juste import you d be deux-points, puis p u 0.2 db accolades. Et cela va exécuter votre bogueur d pour vous. Alors quoi ? Ça va à vous ? Est-ce que cela va me dire tout ce à quoi j'ai accès dans ce point de vue particulier ? Toutes les variables, toutes les données, tout. Allons de l'avant et créons une nouvelle variable ici. Juste à titre d'exemple, il s'appelle Space Company est égal à X. Assurez-vous que nos serveurs fonctionnant Ok, semble un ok. Revenons maintenant à notre page de services et nous allons juste rafraîchir cette page. La raison pour laquelle nous sommes sur cette page, en passant, est que nous avons une page de liste de services et que nous ajoutons un contact personnalisé. Nous avons donc une logique personnalisée ici, pas vraiment logique, mais des données personnalisées que nous voulons jeter dans le modèle. Et peut-être qu'on doit vérifier ça et comprendre ce qui se passe. Donc, parmi la page de liste de services et une actualisation de succès, et il semble qu'il va juste se charger pour toujours. Mais si vous redémarrez votre terminal, vous allez voir cette page extrêmement laide maintenant. Habituellement, il y a un peu de pop up dans le vent au milieu, il suffit de frapper. Je crois que c'est la flèche droite, puis entrez, et ça vous fera entrer ici. Et puis vous pouvez frapper à gauche et à droite, et vous pouvez passer par ici. D' habitude, je vais directement à la bonne section. Vous pouvez voir que les trucs verts changent là-dedans, et donc on a accès aux gardes. Le contexte, les arguments des mots-clés, qui avaient accès à l'ensemble du PP. Tu seras une chose dont on n'a pas besoin qui était déjà en cours d'exécution. Il demande exécute une demande de whisky. Self est la page de liste des services. Notre variable personnalisée appelée Space Company, est égale à X, et c'est tout. On a d'autres choses là-dedans dans lesquelles on ne va pas entrer parce que c'est la plus grande aide. Allons donc dans notre contexte. Je vais appuyer sur la barre oblique. C' est juste au-dessus de ma clé de retour, et cela va juste l'ouvrir contre pas super intuitif, mais c'est super utile. Et dans le contexte, nous avons la page auto demande et les services afin que nous puissions réellement voir que lorsque nous revenons ici à la page de liste de service, nous avons utilisé la page point quelque chose page page point point page page titre point payé coups payés. Sous-titre Et donc si j'ouvre celui-ci à nouveau en utilisant la même clé, nous pouvons voir tout ce qui est disponible pour nous dans le modèle. Et depuis, faites défiler vers le bas jusqu'à ce que je vois le titre dot tono, Où es-tu ? Un titre de PDG slug toutes sortes de choses. Il y a notre sous-titre ici. Tous les services que nous pouvons faire sur votre fusée. C' est exactement exact. Et c'est le titre de la page est juste appelé services. C' est notre page. Tu es l On l'a utilisé avant, et maintenant on peut voir tout ce qu'il y a ici. Nous avons un chemin complet. Si jamais tu as besoin de toutes sortes de choses, moi sera exactement la même chose. Self et Paige sont identiques, mais celui que nous avons ajouté, peut-être celui que nous voulons déboguer est ces services. Et c'est parce que si nous revenons ici, nous avons dit que les services de contexte sont égaux aux objets de tir payés qui vivent ce public. Peut-être qu'on ne sait pas tout ce qu'il y a là-dedans. On ne peut pas comprendre quelque chose. Il semble juste que ça nous jette des données mystérieuses pour qu'on puisse y aller. Nous pouvons ouvrir celui-ci et il dit zéro et un, donc nous savons automatiquement que c'est une liste. Ce n'est pas un dictionnaire. dictionnaires ont appelé Kees. Les listes ont des index ou des indices juste pour leur index zéro et on en fait une liste. Donc, la première page va apparaître, et c'est la page de service qui pourrait réellement voir apparaître. Donc zéro c'est le 1er 1 est une page de service, et ensuite nous pourrions utiliser défiler tout le chemin vers le bas , obtenir toutes sortes de choses Paige. J' ai d. numéro cinq. C' est soigné. C' est la vie ? Oui, celui-là est en direct. C' est un verrou ? Non. Ce n'est pas verrouillé, Max Count. Nous n'avons pas appris ça, mais nous allons, Oh, Oh, des tas de choses dans l'année et il y a des titres. Le 1er 1 est le nettoyage. Quelqu' un continue de descendre et d'aller au numéro 2, votre index numéro un. Mais c'est le 2e 1 de notre liste. Juste aller jusqu'à l'endroit où il dit point titre à nouveau brillant. Donc les premiers services de nettoyage du second service brille, donc ça nous dit exactement ce que nous voulons. Ou dans ce cas, je veux voir juste les titres, qui seraient nettoyer et briller dans cet ordre, nettoyer et briller. Donc c'est vraiment cool. C' est une autre façon de vraiment déboguer ce qui vous est présenté dans un contact particulier . Donc pour nous, nous sommes dans les contacts. C' est là qu'il est exécuté ici, et c'est en haut à droite que sont toutes les données auxquelles nous avons accès. Donc, si jamais tu te demandes, qu'est-ce que c'est ? Un nom de champ de titre de PDG ? Vous allez juste ici, regardez le nom du PDG ou vous pouvez regarder l'attente jusqu'au code source et, enfin , pour sortir d'ici, vous avez juste tapé la lettre Q pour quitter. Il va se plaindre. Oui. Il va se plaindre. Pas d'exception. Message fourni. C' est bon. Et on va juste se débarrasser de ça. Ne fais pas celle-là non plus. Peur de ce serveur a redémarré lui-même, mais si ce n'est pas le cas, vous pouvez toujours le redémarrer manuellement. Rafraîchir Pidge. Et nous avons vu sur la barre d'outils de débogage et tout. Alors on y va. Nous avons Django débogage barre d'outils et P vous d être installé. Nous avons également ajouté un nouveau fichier appelé dev dot txt. Donc, chaque fois que vous installez ce projet, vous allez taper pip install Dash sont dev dot t x team et il installera tout reste des exigences, pas le fichier txt, mais aussi la barre d'outils de débogage Django et P vous d être. J' espère que ça va vous aider à l'avenir encore si vous avez vos propres outils et que vous n'aimez pas ceux-ci, ignorez totalement ça. Mais ces deux outils m'ont énormément aidé au fil des ans et même aujourd'hui, je l'ai toujours installé sur presque tous les projets, juste pour que je puisse avoir ce petit coup de mainsupplémentaire coup de main 15. Page Flex/Misc: Bon, allons de l'avant et créons un autre type de page. Ce n'est pas la chose la plus excitante que nous ayons faite jusqu'à présent. Mais nous allons créer un type de page régulier. Je vais appeler ça une page flexible. Ah, certaines personnes appellent ça une page générique ou une page de base. Certaines personnes appellent la page diverse ou une page standard, mais en réalité, l'idée est que nous avons une sorte de page. Il n'a aucun but réel, sauf pour servir du contenu. Donc, cette page ne va pas nécessairement être liée à ah, blawg ou services. Ce n'est pas comme une page détaillée de service où elle a réellement un but particulier. Ceci est juste une page de contenu régulière. Non, nous n'allons pas ajouter de contenu tout de suite, mais nous devons créer cette page pour un futur Leçons. Allons de l'avant, actionnons votre environnement virtuel et continuons à courir. Python a géré. Je démarre l'application. Je vais l'appeler Flex, puis aller de l'avant et exécuter votre serveur avec Python géré, j'exécute le port 8000 du serveur et dans notre code, je vais ouvrir le tarte de points de base et juste en dessous des services j'ai une nouvelle application ici appelé Flex et vous pouvez réellement voir dans mon éditeur ici. J' ai un nouveau dossier appelé Flex, donc je vais le sauvegarder et ouvrir Flex. Et je vais me débarrasser de certaines choses dont nous n'avons pas besoin parce que Wag Tail s'occupe de beaucoup de ces trucs pour nous. Donc, vue vers le haut. Je n'ai pas besoin Nous n'écrivons pas de tests. On ne fait rien avec notre administrateur. Nous voulons garder les migrations dedans. AP et modèles, cette tarte et vraiment tout ce que nous allons faire est de créer une page régulière une fois de plus. Donc, nous allons faire à partir d'attendre jusqu'à la page d'importation des modèles de points de base, puis nous allons créer une nouvelle page appelée une page Flex, et il va juste hériter du modèle de page. Et pour l'instant, nous pouvons faire passer, et ce serait assez bon pour créer une page. Maintenant, allons vraiment aller plus loin. Faisons la classe metta, et donnons à cela des noms de vantail. Donc, nous allons voir que nous pouvons réellement changer le nom ici, donc cela est dû pour les deux Nom est égal à flex, et il serait normalement juste appelé Flex Page. Mais nous allons l'appeler page Flex Divers, et le verbose nommé pluriel va être flex pages manquantes juste comme ça. Maintenant, si nous ouvrons un navigateur et que je suis juste en train d'éditer la page d'accueil ici, si je vais à Ajouter Child Pidge, nous avons une page flex misc ici. Je vais juste faire un peu plus grand maintenant quand je clique dessus parce que je n'ai pas exécuté de migrations, je m'attends à ce que cela me jette le Classic 404 Nous avons déjà couru dans cet air une fois, et c'est un comportement très attendu. Retournons à notre terminal. Annulez ça, et je vais juste effacer cette page. Et maintenant, je vais exécuter python gérer dot pie, faire des migrations. Et puis, une fois de plus python géré, je migre et encore, ce que cela fait est quand vous faites des migrations comme celle-ci vient de créer un fichier appelé 0001 underscore initial dot pie. Et cela écrit vraiment juste des instructions Python IQ pour ce que Django devrait faire pour commencer à façonner votre base de données de sorte que cette page fonctionne réellement pour nous, puis lorsque nous exécutons Python géré haute migration. Cela appliquera ce nouveau fichier de migration, et il va réellement structurer à la page que nous recherchons Teoh pour créer dans notre base de données. Donc, il gère notre table de base de données sur les colonnes pour nous. Maintenant, allons de l'avant, réexécutez notre serveur, fermez cela et actualisez. Et dans une seconde, cela va charger. Nous pouvons maintenant créer une nouvelle page flexible. Alors appelons ça. Je ne sais pas pour nous. Juste une page générique Maintenant, il n'y a rien d'autre sur cette page. Nous allons le garder comme ça juste pour un petit peu. Nous avons juste besoin de cette page pour être opérationnelle. Alors allez-y, publiez cette page. Les choses allaient bien, quand nous cliquons de toi en direct. On l'a déjà vu. On l'a vu un certain nombre de fois. Nous allons obtenir un modèle, n'existe pas d'erreur. Et tout comme ce modèle n'existe pas à propos de nous. Il est à la recherche de flex slash flex underscore payé tir. HTML. Nous pouvons réellement aller et changer exactement quelles pages recherchent. Nous savons que si nous regardons ici en utilisant le moteur Django, ce bon genre de chose dans cette zone d'air à droite. Nous pouvons voir qu'il recherche Flex Page dans le dossier Flex, qui vit dans le dossier Templates. Il est également à la recherche dans l'application maison et l'application de recherche, puis aussi à l'intérieur de tous nos forfaits. Allons-y, faites en sorte que ce modèle existe réellement. Ouvrez notre code et je vais juste fermer tout cela ouvrir, Rocket Man, allez dans les modèles et créons un nouveau dossier ici appelé Flex, puis une nouvelle page appelée Flex page dot html. Et c'est exactement où Wag queue à la recherche de ce modèle. Ensuite, nous devons réellement étendre cela à partir d'une page. Allons cela à partir de la base de l'e-mail hte. C' est de là que tout notre HTML va venir à l'origine, et nous allons juste écraser un peu ici. Créons un nouveau bloc, et on va l'appeler « contenu ». Maintenant, si vous venez de nous rejoindre, si vous ouvrez en fonction du HTML, nous avons un blocage ici appelé contenu de bannière et Js supplémentaires. Nous allons prendre ce contenu un, et nous allons juste injecter un tas de HTML ici. Alors quoi ? Je vais faire est juste. Un code bootstrap vraiment rapide. Donc j'ai une rangée. J' ai la colonne moyenne huit, et compensons ça par deux Donc décalez MD à et j'ai un H ici. J' ai une classe personnalisée que je vais utiliser appelée titre interne CC, et ici nous allons juste utiliser le titre de point de page de titre de point et chaque façon dire que Paige est livré avec un champ appelé Title, donc nous savons que nous avons accès à ça. Allons de l'avant et rafraîchissons notre page et nous pouvons voir qu'elle est là. Nous avons un peu sur notre titre. C' est exactement ce que j'ai compris. Wag Tail est un système de gestion de contenu qui est le titre de notre page. Aucun titre de notre page n'apparaît ici, donc c'est tout ce qu'il y a pour vraiment créer une toute nouvelle application et une page à partir de zéro. Nous allons ajouter un peu plus à cette page car nous commençons à entrer dans les champs de flux un peu plus tard afin que cette page puisse être complètement personnalisable. Alors allez-y, commit qui le sauve, faites tout ce que vous devez faire, et quand vous serez prêt, nous passerons à la prochaine vidéo 16. Objets témoignage: Jusqu' à présent, nous avons créé des pages Wag Tail avec seulement quelques champs personnalisés. Cela a été en grande partie tout juste des trucs de conte de weg. Mais maintenant, faisons une sorte de pas vers l'arrière ou vers l'extérieur plutôt. Et nous allons travailler avec Django. Et permettons à un modèle jingle d'être accessible à l'intérieur du wag. Dites à l'administrateur. Maintenant, gros, avec le modèle Wag Tail Inman, nous n'aurons pas besoin du modèle Django Inman. Maintenant, si votre tout nouveau d jango chaque fois que vous travaillez avec des modèles et que vous créez de nouvelles données, il est livré avec l'administrateur Django, et vous pouvez gérer toutes vos données de cette façon. Eh bien, quand vous créez un moyen jusqu'à ce que vous soyez heureux, vous devez maintenant Edmunds et nous allons dire fondamentalement, n'utilisez pas Jan Goodman du tout, je ne vous ai même pas montré le jangle wedemen. On ne va pas y jeter un coup d'oeil. Nous allons simplement utiliser Wag dit modèle Edmund. Donc, je suis dans mon environnement virtuel et mon serveur était en cours d'exécution, donc je vais annuler cela et je vais créer une toute nouvelle application. Donc, je vais faire python gérer dot pie et nous allons créer une nouvelle application appelée témoignages. Si je pouvais épeler le droit de le tester mony als et alors je vais exécuter à nouveau ce serveur et ouvrir mon code. Fermez les trucs de la dernière leçon et vous pouvez voir ici j'ai un nouveau dossier appelé Témoignages. Maintenant, les vues sont vraiment juste un truc de jangle. Vous n'en avez pas trop besoin lorsque vous avez affaire à wag tell, sauf si vous écrivez une vue jangle personnalisée . Donc on va se débarrasser de ce dossier. Eh bien, nous allons écrire n'importe quel test. Je ne pense pas qu'on ait besoin d'écrire un test pour ça. Et nous allons en fait garder nos annonces hommes APS modèles DuPuy In It Up High et Migrations Folder. Donc le plus grand changement ici est que nous gardons vraiment juste le fichier dupuy admin. Allons de l'avant et ouvrir les modèles dot pie. Et avant de le faire, allons de l'avant et ouvrons la tarte des points de base et activons réellement ceci. Donc, nous avons tous ces différents APS. Nous avons ici une nouvelle application appelée témoignages qui correspond au nom du dossier. Où êtes-vous allé ? Témoignages. Juste ici. Non, nous allons à dio est sauver ça et fermer Basé sur la tarte ? Non, nous avons créé une application jingle, et c'est à peu près tout ce dont nous avons besoin à ce stade. Nous allons dire classe et nous allons ajouter un témoignage, et il va hériter des modèles modèle point. C' est juste un jangle droit. Cela n'a rien à voir avec Wag Tail. Et nous allons appeler ça un cours de témoignage a certainement besoin d'une meilleure String doc. Mais pour l'instant, c'est tout ce qu'on va mettre là. Qu' est-ce qu'un témoignage ? Témoignages Une citation et a une personne. Donc on va dire l'attribution, alors qu'est-ce que cette citation va être maintenant ? Cela va ressembler à un champ de queue de façon régulière. Donc, si nous allons à la maison modèles dot pie, nous avons le plomb Texas égal à un champ de char. On a des clés étrangères. Remarquez comment utilise des modèles qui tarte ici ? On va faire exactement la même chose. Mais cette fois, ce n'est pas un moyen. Dis à Paige que c'est un modèle jangle. Donc une citation. Combien de temps veut-on que sa citation dure ? Donnez-nous un champ de texte avec une longueur maximale de quelque chose de relativement court. 500 caractères. Est-ce que ça peut être vide ? Non. Est-ce que ça peut être ? Non. Non, c'est un champ obligatoire et l'attribution allait essentiellement faire la même chose ici, mais nous allons utiliser un champ char, donc celui-ci va avoir une longueur maximale de se. Ah, peut-être que ça a besoin d'un nom et d'un nom d'entreprise. Donc Caleb Tallinn de coder pour tout le monde. Donc je vais juste deviner que c'est environ 50 caractères. Je peux être vide ? Non. Est-ce que ça peut être ? Non. Non. Et je vais partager les choses sur leurs propres lignes parce que ça va juste rendre la vie un peu plus facile si on peut voir tout ça sur des lignes différentes. On y va. Maintenant, nous pouvons faire quelques choses différentes ici. Nous pouvons éventuellement donner à cela un nom détaillé. Nous l'avons fait dans la dernière leçon de se vanter. Le nom est égal à son témoignage et le verbose nommé pluriel pourrait être des témoignages. Maintenant, Jangles va déjà faire ça pour nous. Wag Tail fait déjà ça pour nous. Nous n'avons pas besoin de mettre ça parce que, eh bien, ça va prendre notre nom de classe, témoignage et pluriel aux yeux pluriels. Quelque chose en anglais Fondamentalement, vous ajoutez Justin s et donc ça dit, OK, je vais juste ajouter un s à n'importe quel nom est donc techniquement c'est facultatif. Ce n'est pas nécessaire maintenant. Si vous vouliez changer le nom, mais que vous vouliez garder le nom du modèle comme témoignage, vous pouvez le faire. Ceci est à des fins d'affichage. Ensuite, nous voulons lui donner une chaîne. Donc la mort souligne. Soulignement de chaîne de soulignement. Souligner str interne Il prend un paramètre auto car il est dans un objet. C' est dans une classe à l'intérieur de Python, donc il prend lui-même. Et ce sera juste la représentation sous forme de chaîne de cet élément. Et je vais vous montrer à quoi cela ressemble dans un peu la représentation de chaîne de cette classe pour cet objet et nous allons juste se retourner guillemets ou attribution Nous allons faire soi-même ne citons pas. En fait, nous faisons pas une citation. Retournons une chaîne F. Donc, la citation de point auto par attribution de point auto Donc, il va avoir un nom de chaîne très long. Probablement trop longtemps pour être totalement honnête, mais c'est avec ça que nous allons travailler maintenant. Retournons à notre serveur. Annulez-le et exécutons Python, gérez ce tarte faire des migrations et tout ce que cela va faire est de créer ce fichier de tarte de points initial classique 001 . On l'a déjà vu. C' est fondamentalement juste nos instructions écrites en python sur la façon dont les jangles vont structurer notre base de données pour nous. Maintenant, nous allons effectivement appliquer ceux avec Python géré haut migration qui fonctionne. Allons-y, réexécutons son serveur et revenons à notre administrateur. Donc je suis juste de retour dans mon wag disant aux hommes ici, et je vais juste charger une page et vous verrez une fois qu'il sera chargé, rien n'a changé. Vous ne serez pas en mesure de trouver des témoignages n'importe où ici. Le fait est qu' il existe. Nous avons structuré notre base de données avec des témoignages ou avec une table de témoignages, que nous pouvons voir dans notre modèle ici. Cependant, nous n'avons pas du tout accès à cela. Alors allons de l'avant et donnons-nous accès à nos propres données ici afin que nous puissions ajouter des témoignages. Alors allons-y. Ouvrez à Minda Pie. C' est la première fois que nous ouvrons à min dot pie et je vais en fait me débarrasser de tout ça. Ici Django Wittman, et nous allons utiliser Wag Tails Admin. Alors faisons, Ah, Ah, peu d'importation ici. Donc, nous allons faire à partir de Wag Tail Dodge Con Trib dot admin options dot import. Et nous voulons importer le modèle Edmund et aussi le modèle admin Register. Maintenant, avant de continuer, vous pouvez voir que cela vient du paquet appelé Con Trib. Je ne suis pas vraiment un paquet. C' est plus de, ah, support pour les contributions pour des fonctionnalités supplémentaires que Wag Tail peut venir avec. Nous devons nous assurer que cela est activé. Alors ouvrons notre tarte de points de base et regardons ici pour wag tail dot avec Trib dot model admin. Donc, nous mannequons Edmon. Je ne le vois nulle part ici. Donc, nous allons vouloir activer cela, et je vais juste le mettre avec le reste de la contribution Weddell point avec Trib dot modèle Edmund, Sauvegarder ça. Vérifions son terminal. Tout semble être un bon, là-haut. Retournez à notre navigateur. Donnez-lui un rafraîchissement. La vie sera belle une fois que je chargerai. On y va encore. Je n'allais rien voir. Donc c'est fermé à partir de tarte. Continuons à enregistrer notre application ici. Ensuite, nous devons réellement importer le témoignage lui-même. Donc, parce que ce n'est pas le même dossier à min dot pie et les modèles top high, nous pouvons juste faire à partir de modèles dot import testimonial. Merci. V s code pour le sentiment auto que pour moi. Ensuite, continuons et enregistrons réellement ce modèle. Inman. Maintenant, ce que nous devons faire ici, c'est que nous devons créer un modèle qu'il habille avec notre témoignage. C' est ce cours ici. Et puis nous devons réellement l'enregistrer. Donc, nous allons créer une classe une nouvelle classe et admettre en classe, puis enregistrer cela. Alors appelons ce témoignage. Admin pourrait être appelé vraiment n'importe quoi et va hériter modèle admit noix. Celle-là, juste là. Merci. Avoir ce doctorat de témoignage chez les hommes C'est un temps testé et un doctorat inutile. Mais vous connaissez les doctrines, doc. String Donc modèle est égal à ceci est l'endroit où nous commençons à réellement définir nos femmes modèle. Donc le modèle est égal à le tester mémorial, et cela doit correspondre à la classe de témoignage réelle. C' est le modèle Django que nous voyons dans les modèles dot pie. C' est celui-là. Ensuite, faisons l'étiquette du menu. Comment voulons-nous appeler ça dans notre Wag Telemann ? Donc quand ça apparaît dans son menu ici, comment veut-on l'appeler ? Je vais appeler ça des témoignages. Donnons-lui une icône de menu aussi, et je vais juste lui donner un espace réservé. Un ordre de menu quelque part entre 101,000 problème. Allons, je ne sais pas. Donnons-lui un 290. Ajoutez deux menus de paramètres et vous pouvez trouver tous ces paramètres dans la documentation ainsi que dans les docks qui attendent le point io. Je ne veux pas ajouter cela au menu Paramètres. Ce que cela veut dire, c'est que c'est là, n'y ajoutons pas, nous n'en avons pas besoin. Exclure de l'Explorateur est égal à false. excluons pas de l'Explorateur, et il y en a deux autres dans la liste ici, et celui-ci sera égal à vous. Quelque chose qu'on ne va pas ajouter ça tout de suite. Sur ce faire les champs de recherche est égal à quelque chose aussi bien. On n'ajoutera pas ça non plus. Allons de l'avant et sauvegardons ça. Vérifiez notre terminal. Assurez-vous qu'il a réellement actualisé. Parfois, ce n'est pas le cas. Et revenons à notre page de queue de wag et appuyez sur Rafraîchir. Et bien sûr, vous voyez que ça ne marche toujours pas Eh bien, c'est parce qu'il y a à peine une minute , il y a quelques minutes, je disais que nous devons créer un modèle d'admission et ensuite nous devons l'enregistrer. Donc, prenons ce modèle avait été enregistré et ajoutons ceci en tant que décorateur. Donc on va mettre ça là frapper sauver à nouveau. Assurez-vous que le serveur Terminal are Django redémarre lui-même. Maintenant, nous allons frapper rafraîchissant. On verra sur le côté. Ça va dire des témoignages comme ça avec notre petite icône. C' est une icône d'espace réservé. Nous avons précisé que l'un des témoignages. On n'a pas de témoignage. Allons-y et ajoutez-en un. Que faire ou pas. n'y a pas d'essai classique Yoda pour aller de l'avant et sauver, et nous avons un témoignage. On peut en ajouter un autre ici, et ça va être oh, de Chewbacca, et ils sont vraiment donc nous avons des témoignages dans votre C'est plutôt cool. Maintenant, à tout moment dans le temps, fonctions internes get contexte quand nous sommes quand nous éditons une page comme j'allais la référencer. Mais parlons vraiment de ça. Nous avons une page Modèles de service ici, La page de liste de services et Inter get contexte. Nous pouvons maintenant dire que les témoignages points d'objets sont tous points, et nous pouvons obtenir tous les témoignages. Cela nous permet, en tant que développeurs, de permettre aux personnes d'entrée de contenu ou à votre client d'entrer une forme quelconque de données. Et on pourra l'utiliser un peu plus tard. Très bien, peu commun que cette liste s'affiche, et nous voulons définir deux champs ici. Donc, ce sera comme ça qu'il sera affiché en ce moment. C' est juste la seule colonne juste ce témoignage et c'est la représentation de chaîne. Donc, cette chaîne cette méthode str dit ici la citation par celui qui l'a dit. Donc, si nous avons fait ça un tas de ordures ici, sauvegardez ça, attendez que le serveur se rafraîchisse, nous allons voir tout ce courrier indésirable apparaît sur sa page ici juste comme ça. C' est la représentation sous forme de chaîne. On ne veut pas ça parce que ça a l'air terrible. Et au lieu de simplement montrer la représentation sous forme de chaîne de notre classe, ce que nous pouvons dire c'est, Hey, attends de montrer la citation et l'attribution sous forme de colonnes. Allons de l'avant et ajoutons citation en minuscules et attribution. Allez-y, enregistrez et actualisez notre page. Et regarderais-tu ça ? Nous avons cité une attribution et c'est une sorte de tout. Maintenant, ajoutons quelques recherches parce que peut-être en tant que société d'entretien de fusée, nous avons tellement de clients que je ne peux que penser, comme trois en haut de ma tête, Origine bleue, Space X et NASA, Peut-être Virgin Galactique. Donc nous avons quatre clients, mais oui, ils nous écrivent chacun 500 témoignages. Donc nous avons 2000 témoignages de son côté, et nous voulons pouvoir les fouiller. Quels champs voulons-nous rechercher ? Nous voulons être en mesure de rechercher par citation et l'attribution sur ce que cela va dio . C' est un hé, je sais qu'il y a des recherches intégrées dans tout ça. Et donc, euh, c'est la barre de recherche et nous allons taper G R apparaît avec Ger. Tapons Yoda, et il trouve Yoda pour nous. Mais à l'avenir, nous allons vouloir être en mesure de sélectionner certains d'entre eux. Nous voulons que la personne chargée de l'entrée de contenu ou un client dise, Oh , en fait, je veux seulement que cette citation de Yoda apparaisse sur notre page, et pour l'instant ils n'ont aucun moyen de le faire de la manière. Dites, il y a cette fonctionnalité appelée un panneau de sélection d'extraits, et comme un flux rempli, il s'agit d'un bloc de sélecteur d'extraits. Et ce que cela fait est si nous enregistrons ceci comme un extrait d'extrait de citation les, puis devenir des morceaux de données réutilisables avec une interface utilisateur graphique à l'intérieur de Wag Tail. Nous aborderons cela un peu plus tard, mais pour l'instant, continuons et inscrivons ceci comme un extrait. Donc, tout ce que nous avons à faire maintenant est de retourner à nos modèles dot pie et en haut ici. Nous allons vouloir enregistrer ceci comme un moyen jusqu'à des extraits. Donc ça vient des extraits de points de queue de wag. Top modèles, importation extrait de registre, celui là, et nous pouvons l'utiliser comme un décorateur ou occasionnellement, vous verrez cela utilisé comme une fonction. Et ensuite tu pourrais mettre ton témoignage ici comme ça. Nous ne allons pas l'utiliser comme une fonction, nous allons l'utiliser comme un décorateur en Python parce que tout est un objet que vous pouvez les utiliser de façon interchangeable. Utilisez l'un ou l'autre. N' utilisez pas les deux, cependant. Allons-y, page de rafraîchissement et tout d'un coup. Voir la section intitulée Snippets Show Up. Maintenant, les extraits sont à nouveau des morceaux de données réutilisables. Nous avons une section intitulée Témoignages. Il comprend que nous avons des témoignages ici est appelé Témoignage utilise le nom verbeux témoignages pluriels. C' est un clic là-dedans, et maintenant, à ce stade, on peut sélectionner un tas de Leeds. Rendons ça juste un peu plus petit. L' ensemble a l'air un peu plus agréable. Nous pouvons sélectionner un tas de ces affaiblis, en supprimer un tas en même temps. On peut les éditer. Nous pouvons en supprimer un à la fois si nous le voulions. Mais ce qui est agréable, c'est fin de route, tout comme un panneau de sélection de pages ou un panneau de sélection d'images, petit motile qui apparaît vous permet de choisir une page ou une image. On va pouvoir dire, Hey, Hey, montre-nous un motel où on peut choisir juste des témoignages, donc ça arrive, en bas de la route. Donc, essentiellement ce que nous avons fait est que nous avons créé un modèle jingle enregistré avec Wag Tail . Donc waggle est maintenant notre panel chez les hommes. Donc, nous n'avons pas besoin d'utiliser le jangle Admit nous avons ajouté plusieurs colonnes. Ils sont en quelque sorte tout ce que nous avons ajouté recherche, affaiblir, recherche à travers soit l'attribution ou la colonne de citation Et puis nous l'avons enregistré comme un extrait et maintenant nos données peuvent être utilisées dans une interface utilisateur graphique ou dans quelque chose comme la fonction get context ou la méthode get context. 17. Bienvenue dans StreamFields: Parlons des champs de flux. J' en ai parlé encore et encore. C' est un concept qui rend le chemin dire extrêmement puissant. Maintenant, les champs de cours d'eau sont une fonctionnalité incroyablement belle. Ils vous permettent d'ajouter des sections de contenu à peu près n'importe où sur votre page. Vous pouvez ajouter des champs de flux illimités, et votre contenu n'a pas besoin d'être dans un ordre particulier. Donc, si nous voyons notre page Rocket Man en ce moment, nous avons en-tête une section héros, rien ici et ensuite une section de pied de page qui est tout en ordre. Et ça va rester comme ça parce que nous avions besoin de cette façon. Nous avons besoin d'un modèle constant ou d'une mise en page pour l'ensemble de notre site. Mais en plein milieu ici, nous avons toutes sortes de contenus différents et nous pouvons le mélanger et faire correspondre avec un champ de flux. Aucun exemple de cet al être Il est probablement un exemple assez laid. C' est celui-là ? Oui, on y va. Donc, sur le site Web Wag queue dot com, c'est une page de détails de tutoriel que j'ai. Il saisit automatiquement le nom de la balise et le nom de la page, et celui-ci est un titre. C' est un champ de flux et puis j'ai une section technique riche ici pour que je puisse ajouter des liens et des images et des choses comme ça. Et puis j'ai un autre titre ici, un texte plus basique. Et puis j'ai une section de code et je peux écrire n'importe quel type de code. Je veux encore un autre titre pour plus de texte et un peu plus de code. Et je peux mélanger et assortir ça comme je veux. C' est donc non, ce n'est pas le meilleur exemple. Voyons si je peux en trouver un meilleur. Ok, j'en ai trouvé un enfin, comment enregistrer un modèle de jingle avec wag tail model admin, qui pense en fait était notre dernière leçon. Donc, si jamais vous cherchez du code source, c'est sur cette page. Donc vous pouvez voir ici. J' ai un titre tout aussi plaisanté et j'ai un champ de flux où je peux littéralement mettre l'essentiel. Vous êtes Ellen ici. Donc, j'ai juste votre tout, et il fait automatiquement la mise en évidence et les choses d'un hub get. Toi, Errol. Je peux nous mélanger et nous faire correspondre tout ce qu'ils veulent. Et comme cette autre page, je pourrais déplacer ça de haut en bas. Je pourrais ajouter du contenu entre les sections. Je pourrais ajouter des titres où je veux. n'y a pas de formatage strict, et c'est ce qu'un champ de flux nous permet de faire. Mais je suppose qu'un meilleur exemple serait, disons, page de destination. Disons que vous avez une page de destination où vous essayez de convertir quelqu'un. En fait, j'ai juste pensé à un exemple encore meilleur. Donc voici un site Wag Tail. C' est de l'amplificateur donnant des org de points donc ils ont une section de bannière ici. Cela ne fait pas partie d'un flux rempli parce qu'il y aura toujours une bannière ici, mais ils peuvent échanger les images et les textes et des choses comme ça. Ensuite, nous avons une section ici où ils peuvent avancer vers le haut ou vers le bas. Ils ont donc cette section des trois cartes, et ils pourraient la déplacer vers le bas, tronquer une section ou la supprimer entièrement. Et puis ils ont un autre champ de flux ici. Pourquoi a commencé à donner cercle ? Ils pourraient déplacer cela vers le haut ou vers le bas pour personnaliser tout ce qu'il contient. Ensuite, ils doivent s'inscrire, s' inscrire à un bulletin d'information pour recevoir de la philanthropie, des ressources de formation et d'apprentissage, des possibilités de subvention affichées par des cercles de dons, et il a demandé une adresse courriel. Ensuite, il y a une autre section ici un champ de flux, une autre ici et une partie du fond. Et on pourrait dire, tu sais quoi ? Peut-être qu'on veut un orteil vert. Sois aussi ici en plein milieu. Être capable de changer votre contenu comme ça rend vos pages vraiment, vraiment flexibles tout en conservant un design agréable. Maintenant, si vous êtes déjà familier avec les champs Django Stream, nous allons ressembler beaucoup à un modèle ah standard mélangé avec la forme jangle. Mais si vous êtes tout nouveau à jangle, votre tout nouveau à Wag tail va ressembler beaucoup à ce que nous avons déjà travaillé avec une légère différence. Et c'est comme la différence, pour la plupart, c'est au lieu de dire les modèles que le champ de texte, nous allons finir par dire blocs, bloc de texte et au lieu de couvertures faux et faux de Noah, nous allons de dire : Est-il nécessaire vrai ou faux ? part ça, presque rien ne va changer. Tout ce que nous avons écrit va vous être déjà très familier. Maintenant, dans cette vidéo, nous n'allons pas écrire de champs de flux. Je voulais juste vous donner une introduction rapide sur ce qu'est un champ de flux et pourquoi il est important. Et puis, comme une dernière sorte de champs importants de flux notables et comment ils sont stockés dans la base en ce moment dans son bloc de témoignage ou un modèle de témoignage, nous avons des quotas égaux aux champs de texte de points de modèles dans notre base de données. Quelle que soit la reine de la base de données abusant de cela sera un champ de texte ou une colonne de texte d'une longueur maximale de 500. L' attribution va être ah, probablement d'arquer notre champ ou un champ de caractère régulier avec la longueur maximale de 50 caractères que vous pouvez également mettre dans vos champs. Positif enterré vos champs, clés étrangères beaucoup à de nombreuses relations. Des choses comme ça et celles-ci sont toutes stockées dans leurs propres colonnes. Mais un champ de flux n'est pas stocké comme ça. Un champ de flux est fondamentalement tout votre flux. Les données de champ vont être stockées en tant qu'objet Jason géant, et la raison en est que cela permet à votre page de rechercher tous ses champs personnalisés très rapidement et de maintenir l'ordre de tout votre contenu tout en restant seulement effectuer des requêtes de base de données quand il est absolument nécessaire de le faire. Mais en tant que développeur python qui pourrait faire l'analyse de vos données de champ de flux. Ah, un peu délicat parce que tout est solidifié, et c'est un peu plus difficile de le faire partout dans la base de données comme vous l'attendiez. Donc il y a surtout des pros. C' est 90 % de prose, mais il y a une petite escroquerie. Si vous cherchez à vraiment automatiser vos champs de flux et que vous voulez peut-être que quelqu'un remplisse un formulaire sur votre page et crée un champ de flux sur la route, peut-être que ce n'est pas la meilleure approche, car cela va être un peu un peu plus difficile que d'utiliser simplement un champ régulier et juste mettre à jour un modèle régulier. Peu importe, allons de l'avant et sauter directement dans les ruisseaux, les champs 18. Créer l'application StreamField: comme tout ce qui se passe dans le monde de la programmation, il y a plusieurs façons d'obtenir exactement le même résultat final. Dans ce cours. Nous avons mis toutes nos pages dans leurs propres AP au lieu d'une grande application appelée pages . Mais, hey, certaines personnes aiment mettre toutes leurs pages dans une seule application, et c'est tout à fait OK. Je ne vais pas te dire que c'est bien ou mal pour moi. J' aime partager les choses pour les trouver beaucoup plus facilement. La même idée peut être appliquée aux champs de flux, bien que je vais créer une application juste quatre champs de flux afin que nous ne courons pas dans importations circulaires et nous avons une zone dédiée pour tous nos champs de flux. Il nous aide à trouver nos sections de contenu personnalisées. Ah, beaucoup plus facile, je trouve. Donc, au lieu de les étaler dans le flux, sent que sont juste pour la page d'accueil sans champs de flux dans l'application d'accueil. Et puis nous avons des champs de flux dans les services Apple. Nous avons des champs de flux dans, comme je ne connais pas l'application de page flexible. On va juste les assembler pour qu'on puisse les trouver gentils et facilement, donc ce que je vais faire ici, c'est juste entrer dans mon environnement virtuel. Source. Rocketman vin été active. C' est comme ça qu'on le fait. Ensuite, allons de l'avant et faisons python gérer la tarte à points. Démarrer AP Streams and Streams est Il va y avoir une terminologie courte pour les champs de flux de mots , et allons de l'avant et faire Python géré à PI run over et faisons cela sur le port 8000. Ouvrons notre code et nous pouvons voir qu'il y a une nouvelle section ici appelée Streams. Allons de l'avant et activer cette nouvelle application, alors entrez basé haut dans notre APS installé. Encore une fois, nous avons déjà fait ce nombre de fois. Allons de l'avant et ajoutons des flux ici. Sauvegardez près de cela et allons-y et cherchons des flux maintenant. En fait, nous n'avons pas besoin de beaucoup de ça. Nous n'avons pas besoin de vues. Ils auront leurs propres modèles, et les champs de flux seront également inclus sur différentes pages. Nous n'allons pas écrire de tests, donc nous n'avons pas besoin de le faire. modèles tandis que les champs de flux sont en quelque sorte leurs propres choses, donc ce que nous allons faire est de renommer les modèles. Deux pâtés de maisons. Je suppose que vous pourriez appeler ça des mannequins si vous le vouliez. J' aime Colin. Il bloque APS. On y va. Teoh, garde l'administrateur. Nous allons supprimer. Nous y avons donc des migrations. APS et blocs et en blocs. J' allais supprimer ça. Et maintenant, nous avons ce qui ressemble à une application jangle que nous avons un peu muté. Donc, nous n'avons même plus de fichier d'arrêt de modèle. C' est juste bloc Stop, je Maintenant, la raison pour laquelle je l'appelle un bloc est parce que chaque champ de flux, chaque champ de flux que nous finissons par créer est en fait un bloc d'une sorte quelconque. Donc peut-être que c'est un bloc char ou un bloc de sélecteur d'image ou un bloc de choix. Nous allons passer par un tas de ces différents blocs ensemble, mais pour l'instant nous avons juste besoin de nous assurer que nous avons des flux en cours d'exécution, que nous avons des flux activés en fonction de pie et que nous avons un arrêt de bloc. Je dépose une fois que vous avez cette tête sur la leçon suivante et nous allons créer notre premier champ de flux 19. Votre premier champ: Oakley localement, allons de l'avant et créons un premier champ de flux. Ce sera un champ de flux basé sur le texte de base, Alors allons de l'avant et ouvrons notre bloc de flux. Arrêtez, je dépose et créons notre premier bloc frappé. Et ce que je dis ici est frappé bloc. Maintenant, nous allons créer un bloc frappé avec un seul champ dans. Ce sera juste un champ de texte normal. Et au lieu d'utiliser quelque chose comme des modèles néerlandais, notre domaine, nous pouvons utiliser quelque chose comme blocs dot hr bloc. Et c'est strictement wag dire à ce stade, c'est toujours dire tout le chemin. Maintenant, à la racine de celui-ci finit par se décomposer en Django. Mais c'est à peu près toujours dire en ce moment. Maintenant, la bonne chose à propos des champs de flux est qu'ils peuvent être des sections de contenu qui peuvent être ordonnées de haut en bas afin que vous puissiez dire, comme bonjour, Monde est le 1er 1 Mon nom est Caleb est un 2ème 1 J'aime chèvres est le 3ème 1 et c'est juste comme déplacer cela de haut en bas. Mais vous pouvez le faire avec des blocs entiers de contenu. C' est une très belle chose. L' autre chose agréable à ce sujet est que les champs de flux pourraient être imbriqués, ils peuvent être réutilisés, et en fait, nous allons entrer dans cela un peu plus tard. Alors allons de l'avant et commençons avec ça. La première chose que nous devons faire est d'importer ceci. Faisons de wag queue point noyau blocs importants. Aucun avis que cela utilise les blocs de mots et notre fichier est appelé Blocks up High. n'y a pas de relation là-bas. Il se trouve que j'ai appelé ça. I Il n'a pas besoin d'être appelé bloc Stop I. C'est simplement là que je stocke ce fichier, et Wag Tail a également un fichier appelé Blocks That Pie. Maintenant, nous allons créer notre première classe ici un bloc de titre. Appelons ce bloc de titre de classe et va hériter de blocs point frappé bloc, et il va avoir un seul champ ici. Juste texte texte est égal à deux blocs blocs dot hr bloc, et ici, nous pouvons dire au lieu de vide est égal à vrai ou faux ou non est égal à vrai ou faux. Nous pouvons dire que c'est nécessaire. Vrai ou faux. Oui, c'est nécessaire. C' est la valeur par défaut. peux vraiment le voir ici, dit Char. Le bloc nécessite égal à true. C' est la valeur par défaut. Je peux aussi nous aider. Longueur maximale du texte, longueur moyenne, validateurs personnalisés, des choses comme ça. Allons-y et donnons-nous un peu d'aide. Texte. Il allait dire que l'aide Text est du texte à afficher. On n'a pas besoin de panneaux. On n'a pas besoin de ça. Attendez que vous supposez automatiquement que si vous avez un champ de flux ici, il devrait être affiché. Allons de l'avant et travaillons avec des méta données aussi. Donc, tout d' abord, nous pouvons nous donner un modèle, et ça va être quelque part. On y reviendra dans une seconde. On peut nous donner une icône. On y reviendra dans une seconde. Nous nous donnons un nom personnalisé d'étiquette si nous le voulions. Nous y reviendrons dans une seconde et aussi un texte d'aide, qui, si vous ne l'avez pas deviné, nous y reviendrons dans une seconde. Donc, le modèle va être comme à notre façon. Dites aux pages si cela était réveillé jusqu'à ce que les pages soient le titre bloqué chacun à melon, il vivrait à l'intérieur du dossier Streams car c'est l'application stream. Donc, c'est là qu'il chercherait automatiquement. Mais ce n'est pas un wag. Dites à Paige que c'est un champ de ruisseau et qu'il va faire quelque chose de très, très similaire. Mais au lieu de deviner, j'aime toujours mettre ça là de toute façon. Donc, je vais supposer que tous mes champs de flux vont vivre dans le dossier templates dans un sous-dossier appelé Streams, et cela va être appelé title block dot html. J' aime faire ça. Donc, si vous regardiez mon code pour la première fois, vous seriez capable de regarder ce sentiment de rêve il y a. Je sais exactement où est ce modèle. Donnons à cela une icône et une icône d'édition, et l'étiquette va juste être le titre. Sinon, il pourrait s'appeler Title Block ou tout ce que nous voulons appeler, et le texte d'aide va être centré texte à afficher sur la page et que c'est ainsi que nous créons une sensation de flux maintenant qui n'est pas disponible sur un seul page du tout. Donc, si nous retournons ici et nous essayons d'y accéder notre page d'accueil, allons voir que rien n'a changé. Nous avons ajouté le bouton de texte de plomb bouton texte, bannière , image d' arrière-plan, mais nous n'avons pas ajouté de nouvelle section ici. C' est là que le panneau entre en jeu pour exposer réellement les champs de flux à l' interface d'administration . Alors allons de l'avant et ajoutons ceci pour dire simplement la page d'accueil afin que notre page d'accueil puisse avoir du contenu personnalisé dessus. Je vais aller de l'avant et effondrer le panneau gauche là, donc je suis juste à la maison. Modèles dot pie et ici je veux faire à partir de blocs de points de flux. C' est mon fichier de blocs ici, pas l'attente jusqu'à ce que le noyau. C' est mon bloc de titre d'importation de fichier de blocs, Tyto Block. Alternativement, nous pourrions également faire à partir des blocs d'importation de flux, puis un peu plus tard, au lieu d'utiliser simplement le bloc de titre, nous pourrions utiliser le bloc de départ de bloc de titre. En fait, c'est comme ça que nous allons le faire maintenant. Donc, nous allons juste faire à partir des blocs d'importation de flux prochaine dans notre page d'accueil ici. Allons de l'avant et ajoutons des champs de flux personnalisés. Maintenant, un champ de flux est son propre type de champ. Tout comme nous avons un champ char ou un champ de texte. Ça vient de Wag Tail. C' est un flux rempli. Donc ça s'appelle ce corps. C' est comme ça qu'on va l'appeler. Ce sera un champ de flux, et cela va prendre une liste de renversements. Donc c'est un cours. Son premier paramètre est une liste, et ici ce sera un tas de renversements. Appelons ça un titre. C' est un pour mettre renverser, donc le 1er 1 va être ce qu'il est appelé dans la base de données. Donc encore une fois, rappelez-vous comment j'ai mentionné que les champs de flux de queue de wag sont tous stockés dans Jason ? Eh bien, c'est la clé. C' est comme ça qu'il sait ce que ça va être. Donc on va appeler ce titre. Tu peux appeler ça tout ce que tu veux. Il n'a pas besoin d'être titre, et nous allons dire que les blocs de titre de point avec des parenthèses parce que c'est une classe. Je jette juste un commun là pour les bonnes pratiques, je suppose. On va laisser ce champ être connaissable ? Oui, nous allons dire que la page d'accueil n'a peut-être pas de contenu personnalisé et qu'elle est en quelque sorte vide. Disons aussi oui. Cela signifie que vous pouvez enregistrer la page d'accueil sans ajouter de champs de flux supplémentaires sont ou de contenu personnalisé à elle. Maintenant, nous avons ce corps. Qu' est-ce qu'on fait avec ça ? Passons à nos panneaux de contenu ici, et nous devons nous exposer avec un nouveau panneau. Donc est de créer une nouvelle ligne de même déplacer que vers le haut un peu là. Créons un nouveau panneau appelé un panneau de champ Stream, et nous allons juste mettre corps ici maintenant. Si on nous sauve, il est probable que notre terminal va se plaindre parce que, tout d' abord, c'était une table. Il va se plaindre que le flux, le panneau de champ et le champ de flux ne sont pas importés. Alors allons de l'avant et assurez-vous que l'air importé. Donc, dans nos gestionnaires d'édition ici, nous avons panneau de sélection de page de panneau de champ qui est à un panneau de champ de flux ici, et le champ de flux lui-même provient en fait des champs de points décoratifs Wag Tail champ de flux d'importation . Très bien, disons ça et voyons Hey, regardez les terminaux ne se plaindre de rien. Allons voir la page et, comme prévu, air opérationnel. Pas de colonne de ce genre. Corps des points de la page d'accueil. Fondamentalement, c'est une zone SQL disant que notre page d'accueil n'a pas de colonne dans la table qu'elle vit dans le corps froid. Allons de l'avant et faisons nos migrations faire des migrations, appliquer des migrations, réexécuter notre serveur. Allons rafraîchir votre page et nous allons voir une fois qu'il charge veulent charges, Faites défiler tout le chemin vers le bas. Nous avons une nouvelle section ici maintenant, si vous utilisiez Wag Tail 2.6 ou plus tôt, cela va sembler légèrement différent et pour utiliser Wait jusqu'à 2.7 ou plus récent va regarder quelque chose le long de ces lignes. Donc j'ai une nouvelle section appelée un titre, et je pourrais mettre tout ce que je veux ici. C' est une roue. Rendez vos fusées plus économes en carburant, texte centré à afficher sur la page que leur texte d'aide. On a plus de textos là-dedans. C' est un champ obligatoire. Allons-y et sauvegardons ça. Maintenant, quand nous voyons cela, nous ne allons pas vraiment le voir du tout, parce que sur notre modèle de page d'accueil, nous n'avons pas spécifié que nous voulons réellement montrer cela du tout. Donc, notre prochaine étape est maintenant ouvrir la page d'accueil point html. Ce n'est pas le bon du tout. Page d'accueil point html C'est notre page d'accueil. Et sur notre page d'accueil, nous avons une section pour notre bannière. Je vais rendre ça un peu plus petit là-bas. J' ai une section pour une bannière. Réduisons cela et créons un nouveau bloc pour un contenu. Et encore une fois, juste comme un petit rafraîchissement rapide ici. Si nous ouvrons en fonction du HTML, nous avons une section ici juste pour un contenu. Nous allons injecter nos champs de flux ici, et le faire est en fait super facile. Nous avons juste besoin de faire une boucle sur chacun, un bloc de quatre, dans le corps de points de page inclure Bloquer le bloc qui était en boucle. C' est cette valeur juste là et quatre maintenant pour cet orteil réellement enregistrer parce que c' est une fonction wag tail. Cela n'est pas livré avec la valeur par défaut, Django. Nous devons nous assurer de pouvoir nous utiliser. Donc, nous allons également charger avec nos tags d'attente jusqu'à ce que les images wag tail core tags. Sauvegardons cela et actualisons votre page. Et maintenant, nous pouvons voir que le modèle n'existe pas, donc nous arrivons réellement quelque part. Cela signifie que notre bloc de titre Streams Air n'a pas encore de modèle. Allons de l'avant et ajoutons ce modèle. Alors ouvrez mon site Web, puis allez dans les modèles. Et ici, il cherchait des flux slash bloc de titre point html. Encore une fois. D' où j'ai eu ça, c'est que je l'ai spécifié spécifiquement pour vivre ici, et vous pouvez voir où il cherche. Il regarde dans les modèles. Titre des flux bloqué. Html Il est aussi à la recherche dans les modèles de maison. Bloc Titre des flux. Papa, elle mâle. Il est également à la recherche dans les flux de modèles de recherche. Titre bloqué. Html Mettons juste. Le premier endroit est à la recherche qui semble le plus efficace. Donc nous avons un titre bloquant ici. Alors faisons quelque chose de vraiment moche. H un, ceci est une page de rafraîchissement de bloc de titre et oh ! Oh, c'est là. Il y a un bloc de titre. Ok, OK. On s'approche si près de ça. Ok, donc j'ai juste jeté du html ici avec un H 3 et une classe personnalisée sur cet âge de 3 ans. Et maintenant, je peux dire n'importe quoi ici. D' accord ? Non dit dire quoi que ce soit ici. Ça a l'air un peu plus stylé. Allons de l'avant et lançons réellement ce texte ici lorsque vous utilisez la valeur dans le texte de point en minuscules . Maintenant, si vous vous demandez la caméra, où avez-vous eu de la valeur ? Je peux utiliser la valeur ou je peux utiliser moi, que tout le monde a plus de sens pour vous il exactement la même chose. Et ça vient de notre bloc lui-même. Donc bloc de titre et mettre ces ensemble Title Block utilise ce modèle et à l'intérieur de celui-ci, tout comme le texte de point de page ou le titre de bannière de point de page. Celui-ci a un texte de point de bloc de titre. Maintenant, ce n'est pas une page. Donc on ne l'appellera pas Paige pour diffuser des champs. On va lui donner la valeur. La valeur est quel que soit le champ de flux ou self dot quel que soit le nom du champ, je vais appeler cette valeur. Allons de l'avant et actualisons cette page. Eh bien, rendrez vos fusées plus économes en carburant, et c'est exactement ce qu'on a mis sur sa page d'accueil. Jetons un coup d'oeil à la raison pour laquelle nous utilisons un flux rempli pour ça, c'est que je mets quelque chose ici, je vais mettre l'alarme ipsum là-dedans et au-dessous. Je vais mettre que c'est en dessous de l'original. Et nous allons prévisualiser cet alarmisme en haut, l'original et l'autre en bas. Et si je n'aimais pas ça, je pourrais toujours déplacer celui-là. Et donc l'original est maintenant à nouveau dans l'aperçu de la touche inférieure. Faites défiler vers le bas. Eh bien, rendrez vos fusées plus économes en carburant. C' est maintenant au fond. Maintenant, on prend ces sections entières et on les déplace de haut en bas. C' est juste là que cela commence parce que ce n'est qu'un champ de titre que nous pourrions faire est avec des sections entières de contenu avec des images et des vidéos, des documents, liens, toutes sortes de choses. Je vais fermer cet aperçu et je vais le faire, je ne vais pas enregistrer cette page maintenant. Une dernière chose. Lorsque vous travaillez avec des champs de flux parce qu'ils sont untype de champ spécial et complexe, type de champ spécial et complexe, il n'a pas seulement une colonne régulière avec une seule valeur, et c'est un gros blob Jason. C' est toujours une bonne idée, et je ne pense pas que cela aura besoin de migrations, mais je pense que c'est toujours une bonne idée quand vous avez fini de travailler avec eux. Toujours faire géré haut, faire des migrations aucune modification détectée. Mais si vous avez travaillé avec eux, si vous avez fait quelque chose de supplémentaire, vous aurez des modifications détectées, auquel cas vous exécuterez également. Python a géré haut et pour les exécuter, vous utilisez des migrations. Correct ? Ouais, utilisez mon grand, et cela vous appliquera vos changements. Passons à la suivante, où nous pouvons créer des sections de champs de flux où nous pouvons ajouter de plus en plus de plus en plus comme une liste. Ça s'appelle en fait un bloc de liste. Donc, une fois que vous avez fini de jouer avec cela, si vous voulez vraiment vous sentir libre d'expérimenter avec un code et quand vous êtes gentil et prêt, passons à la leçon suivante où nous prenons notre prochain type de champ extrême. 20. Références de StreamFields: Il va y avoir un moment où vous devrez répéter du contenu similaire encore et encore , en utilisant le même modèle et en échangeant différentes parties du contenu. listes de vraiment n'importe quoi sont vraiment bon candidat pour cette chose appelée un bloc de liste. Donc, dans la dernière leçon, nous avons appris à propos d'un bloc frappé. Celui-ci, nous allons utiliser un bloc de liste, et celui-ci a une syntaxe bizarre. Mais c'est une caractéristique très, très puissante dans les champs de la queue de wag. Donc, sur notre site Web allait être de créer un bloc de contenu répété où la personne d' entrée de contenu peut ajouter sur des éléments limités si elles le voulaient. Mais ils vont tous être formatés exactement de la même manière. Et nous allons le faire avec des cartes bootstrap. Donc, si votre serveur n'est pas déjà opérationnel, assurez-vous d'entrer dans votre environnement virtuel et que vous exécutez votre serveur Django. Ensuite, je vais ouvrir le bloc Stop I C'est dans mon application de flux. Donc les flux coupent les blocs qui pieux là où c'est cela et c'est là que nous avons créé notre bloc de titre. Ensuite, nous allons créer un nouveau type de champ de flux. Celui-ci va être appelé un bloc de liste. C' est toujours techniquement un bloc frappé, mais on va jeter un bloc de liste à l'intérieur de celui-ci, et ensuite on va passer à travers les orteils encore et encore et encore. Donc, vous pouvez penser à un bloc de liste, vraiment comme une liste vraiment fantaisie. Et puis à l'intérieur de cette liste de fantaisie, nous allons avoir un autre bloc frappé. Donc encore une fois, la syntaxe devient vraiment bizarre, et je vais essayer de mon mieux pour la décrire au fur et à mesure que nous allons le faire et cela va commencer. Non seulement ça va sembler bizarre, mais ça va sembler un peu compliqué. Probablement déjà cela semble compliqué si vous êtes tout nouveau à Wag Tail. Mais une fois que vous écrivez quelques-uns d'entre eux, ils commencent à avoir beaucoup de sens. Commençons donc par un exemple très simple. Ajoutons un bloc titre char et un bloc de texte et ajoutons ah meta classe Wissem quelques données là-dedans. Alors allons de l'avant et créons de la classe. On va l'appeler bloc de cartes parce que c'est ce que ça finira par être. Calder. C' est ce qu'il va faire. Et ici, ce sera juste un bloc frappé, un bloc régulier frappé. Maintenant, c'est là que ça commence à devenir un peu bizarre. Donc on va avoir des cartes ici, et ça va être des blocs de liste de points. Donc, cela commence déjà à avoir l'air un peu bizarre. Et puis à l'intérieur de ce bloc de liste, on va faire bloc de départ frappé bloc. Maintenant, c'est là que ça devient bizarre parce que nos classes de bloc frappé définissaient un bloc de liste . On a un autre bloc à l'intérieur. Et ici, c'est là que nous allons mettre tous nos champs personnalisés. Donc, c'est une liste de couples tout comme un champ de flux régulier, tout comme comment Sur nos modèles maison que la tarte nous avons champ de flux et c'est une liste de deux problèmes de paire . Ce sera exactement la même chose. Voici une liste de deux couples de paires, donc le 1er 1 va être une virgule de titre, et puis nous allons utiliser des blocs point HR bloc ressemble beaucoup à des blocs HR bloc de notre bloc de titre. Cela va avoir besoin d'une longueur maximale. Nous voulons nous donner une longueur maximale d'environ 100, et nous pouvons lui donner une taxe d'aide, donc l'impôt sur l'aide sera finalement. Ce sera le texte intitulé Bolds pour cette carte, et j'aime mettre la longueur maximale pour que votre client, vos clients, vos clients, gens continentaux sachent à quoi s'attendre. Donc, il y a une longueur maximale de 100 caractères Maintenant, si j'utilise vraiment la télécommande, je veux dire, il y a une ligne vraiment longue, et finalement je pourrais décomposer ça. Mais pour l'instant, je vais garder ça sur une ligne parce que je vais aussi créer du texte ici sur une deuxième ligne. Si je mets cela sur trop de lignes, ça commence à paraître un peu compliqué. Donc, cela va être blocs de texte point bloc. Donc, au lieu de ah, champ de texte, c'est un bloc de texte. La longueur maximale pour celui-ci va être un énorme 255 caractères, c'est tout, c'est tout, et les taxes d'aide vont dire le texte facultatif pour cette carte, La longueur Max Max est de 250 caractères, et disons aussi que c'est facultatif en disant que requis est égal à faux. C' était comme, euh, des métadonnées ici. Donc meta de classe, je vais en agrandir une de plus pour qu'on puisse voir ça un peu plus facile, tu sais, effondrer ça. Ils sont donc nous avons des méta de classe. Et voici, spécifions le modèle, comme nous l'avons fait avec son dernier. Nous allons dire qu'il va dans les flux et cela va être un bloc de cartes html point et quelque chose ne va pas parce que ma mise en évidence de la syntaxe est cassée. Qu' est-ce que je suis entré par effraction ici ? Il est là. Il me manque un support qui semble mieux. Je vais donner à cela une icône d'une image et une étiquette de cartes standard ANA. Je veux dire que s'assurer que mes terminaux ne vont pas orteils se plaignent. Et bien sûr, il s'agit d'un bloc coincé. Je pense que c'est là que j'ai fait la faute de frappe originale. Allons de l'avant et redémarrez Django. Et non, bien sûr, bien sûr bloc coincé n'est pas une chose. Où est coincé ? Bloc ? Vous êtes là. Je regardais le mauvais bloc qui a frappé bloc Ok, terminal et est heureux avec notre code. Revenons également à notre maison slash modèles dot pie. Vous pouvez voir que je suis dans le dossier d'accueil modèles dot pie, et maintenant je vais créer deux autres paires renversant ici, et celui-ci va être des cartes. Et cela va venir du bloc de cartes de départ et encore. Il suffit de mettre un commentaire La fin de la bonne pratique. Revenons à notre page d'accueil et allons la modifier. Je vais attendre qu'il se charge. Nous allons en créer un nouveau ici et regarderons ça. Nous avons un bloc de titre, celui qui a été créé dans la dernière leçon. Nous avons aussi une carte standard Maintenant. C' est là que ça devient vraiment cool parce que cela semble un peu imbriqué maintenant, donc cela pourrait être le titre numéro un, et le texte pourrait être n'importe quelle sorte de Texas complètement optionnel. Donc, disons que le 1er 1 sera facultatif. Titre un avec texte facultatif et allons-y. Appuyez sur ce signe plus et créez un autre. Et ceux-ci sont en fait et totalement échangables, aussi, donc on peut les échanger de haut en bas, et celui-ci va dire, titre numéro deux, titre numéro deux, parce que je ne me sens pas créatif avec mes titres et celui-ci. On va avoir du texte d'ipsum chaud là-dedans. Allons-y et sauvegardons ça. Maintenant, je vais voir en direct et il va dire que je sais que cela va dire que cela ne peut pas trouver le modèle. Bien sûr, regardez ce modèle n'existe pas. Il cherche des ruisseaux. Cartes bloquées. HTML. Allons de l'avant et créons ce fichier maintenant. Donc, dans un modèle d'homme fusée, nous avons déjà un dossier appelé Streams. Nous allons créer un nouveau fichier ici appelé cartes bloc html point et nous allons juste les remboursements est juste boucle à travers cela juste réel rapidement. On n'aura pas encore l'air bien. Nous allons juste faire une boucle à travers ça, donc je vais dire quatre par carte en cartes à points de valeur. Nous pourrions aussi faire la carte de point auto, donc je vais utiliser ces différents champs de flux de gorge interchangeables, et je vais mettre fin à cela. Donc ce que je fais ici, c'est que je dis dans ce champ de flux particulier, pas de mauvais fichier leur Rio. Dans ce champ de flux particulier, j'ai une variable appelée autopoints cartes. Cartes autopoints. programmation orientée objet dicte que si je devais y accéder dans une méthode, elle serait appelée cartes auto-point. C' est une liste. Bloc est juste dans le nom. C' est une liste, donc c'est une boucle d'affaiblissement irritable à travers elle afin que nous puissions dire pour chaque carte dans des cartes auto-point. Et puis on peut aller chercher chacun de ces trucs pour dire que le titre sera un titre de points H trois cartes. Et nous pouvons aussi dire, si le texte de point de carte, nous pouvons mettre le paragraphe dans le texte de point de carte ici et que si et ajoutons aussi un tas de règles horizontales pour rendre cela vraiment, vraiment laid, mais aussi très perceptible avec où nous fonctionnent, Allez-y et actualisez cette page. Regardez ce titre un optionnel sans taxe. Il n'y a pas de taxe là-dedans, droit avec du texte dedans dans un tas de règles horizontales pour rendre la page super laid. Maintenant, revenons ça. Juste une seconde dans ses mannequins ne tarte pas. Nous avons ajouté quelque chose à notre champ de corps. Pourquoi n'avons-nous pas appliqué les migrations ? Eh bien, parce que c'est juste un champ de texte. Stocker beaucoup de Jason dans la base de données n'a pas nécessairement besoin de migrations à appliquer, bien que les chances soient, si vous essayez d'exécuter des migrations dès maintenant, cela indiquerait que des changements ont été détectés. Nous allons lancer des migrations à la fin de cette leçon de toute façon, mais nous n'avons pas besoin de le faire maintenant, accord. Je pense que nous avons encore un peu de temps dans cette vidéo, alors allons de l'avant et ajoutons quelques articles ici. Donc nous allons dire chaque carte comme un titre. Chaque carte a, hum, texto. Voyons voir. Chaque carte a une image, et nous allons utiliser un bloc de sélection d'images que nous n'avons pas importé cette année, pas une image de panneau. Chooser de la chance. Cela va être nécessaire. Deux requis par défaut afin que nous n'ayons pas à mettre requis est égal à une vraie aide. Texas Eagle to Image sera automatiquement corrompu par magie à Ah, si je me souviens correctement quelque part autour de 570 pixels par 370 pixels et nous allons définir ce rognage dans le modèle, continuons et sauvegardons cela et actualisons notre page créditable ou page d'accueil. Oh, il ne va pas se charger parce que je n'ai pas ajouté de bloc de sélecteur d'image, Allons-y et ajoutons cela ici maintenant. Donc, nous faisons de façon dire des images de points, des blocs de canard, l'image d'importation, bloc de sélecteur. On y va. Maintenant, il va se connecter. Et si je fais défiler vers le bas, nous avons une petite section d'images ici. Donc je vais dire que ça va être le 1er et ça va être le 2e 1 va aller avant et sauver ça. Il va à quand je rafraîchis la page va boucler sur tout. n'y a pas d'images parce qu'on ne l'a pas dit. Les orteils ont des images ? Allons lui dire d'avoir quelques images maintenant, avant de pouvoir utiliser des images avec Wag Tail et les recadrer automatiquement et tout ce qu' il faut faire, c'est dire, charger, attendre que images, et qui nous permet d'utiliser une balise de modèle appelée Image. Mettons ça dans une boucle for. Et parce que nous savons que c'est un champ obligatoire, il sera toujours là. Je dirai quatre. Chaque image que nous avons, nous allons utiliser l'image tag card dot Comment avons-nous appelé ça ? Qu' est-ce qu'on a appelé ? Probablement juste image. Oui. Bien sûr, juste appelé l'image. Donc je viens de l'obtenir de la première valeur de nos doubles ensembles de couples ici. Donc, le premier ensemble de notre Topple est appelé image. Celui-ci s'appelle Texans appelé Title. C' est de là que nous obtenons ça. Donc celui-ci vient d'appeler l'image, et je vais juste l'utiliser là-bas. Je vais utiliser la méthode du film. Il y a Max avec les méthodes, hauteur et les méthodes de largeur ainsi, sorte que vous pouvez définir une hauteur maximale ou maximale avec sur vos images. Des choses comme ça allaient dire toujours sentir cet orteil. Toujours être 570 pixels par 370 pixels. Et puis nous allons simplement stocker cela comme une variable appelée image. Allons de l'avant et créons une nouvelle image ici et pour la source. Faisons l'image que vous êtes sur l'autel est l'image dot alta, et donc je suis G matches ici, ici et ici. Cela n'a rien à voir avec la balise HTML, et en fait je peux changer cela juste pour le prouver. On l'appellera l'image. Allons de l'avant, sauvegardons et rafraîchissons notre page, et nous allons voir une image là où elle est. Il y a notre 1er 1 et il y a notre 2ème 1 Et si j'inspecte cet élément ici, bien sûr, il est là. 5 70 par 3 70 il a pris mon image et il l'a recadrée parfaitement. Maintenant, je pense que c'est assez pour cette vidéo particulière. Dans la prochaine, nous allons commencer à abstraire certaines des parties les plus compliquées dans d'autres classes que nous pouvons réutiliser. Donc, dans nos blocs, nous n'avons pas nécessairement besoin de mettre tout ça ici. On peut le faire ressembler à celui-ci ici parce que celui-ci est honnêtement, c'est un peu difficile à lire. Donc on va le retoucher un peu. Et je l'ai également mentionné, à un moment donné, nous pouvons exécuter les migrations eu. Faisons ça. Python a géré haut. Effectuez des migrations. Voyons ce qui se passe. Bien sûr, Alter le corps du champ sur la page d'accueil et appliquons cette migration. Tout va bien. N' oubliez pas à tout moment. Si vous êtes coincé, regardez toujours le code source. C' est tout à fait disponible pour vous. Sinon, passons à la leçon suivante où nous continuons à opérer à l'intérieur de notre liste. Bloc 21. Simplification des flux répétitifs: d' accord. Reprise de la dernière leçon. Il s'agit de la deuxième partie de la leçon de champ de flux répétitif. C' est un sujet assez important, donc il est divisé en au moins deux vidéos. Maintenant, si vous n'avez pas regardé le 1er 1, vous allez devoir regarder le 1er 1 Sinon, vous ne serez probablement pas trop en savoir sur ce qui se passe avec celui-ci dans cette vidéo. Donc maintenant que nous avons un champ de flux de style bloc simple liste, fondamentalement, nous avons frappé bloc avec ce bloc, instruire verrouillage dedans et puis ensembles de temples ici. Allons de l'avant et rendons cela encore plus compliqué, donc la première chose que nous allons faire ici est d'ajouter un lien et nous devons ajouter trois champs . Nous devons ajouter un texte de lien parce que nous voulons que le texte soit personnalisé. Nous voulons un lien interne vers une autre page de queue de wag ou nous voulons un lien externe vers une page. Ce n'est pas sur notre site Web, alors allons de l'avant et sorte de hacher ça très rapidement. On a donc un bloc de démarrage des RH, et on peut le remplir en une seconde. Appelons ce texte de lien. Le 2ème 1 que nous allons appeler la Page Interne, et celui-ci va être une sorte de chaussures payées ou nous ne le savons pas encore. On y reviendra, et le 3ème 1 sera un lien externe. Et ici, c'est Block. Commencez votre bloc L. Comme, euh, euh, vous êtes tous des modèles sur le terrain que vous êtes tous sur le terrain. C' est un bloc que vous étiez un bloc. Ok, donc le lien externe va être nécessaire ? Nous allons dire non, parce que les liens seront facultatifs entièrement la page interne. Comment choisir une page interne ? Attendez jusqu'à ce que nous donne un beau petit outil ici appelé le Bloc de sélection de page, qui peut aussi dire obligatoire est égal à faux Assurez-vous que vous devez calmer à la fin de cela et notre texte de lien. Il nous faut une longueur maximale. Disons 50 et par défaut va dire plus de détails. Mettez également une virgule à la fin de cela. Voyons voir. D' accord. Je n'ai probablement pas de fautes de frappe là-dedans. Allons de l'avant et éditons notre page d'accueil. Et ici, nous pouvons voir il y a le texte du lien et la page interne, un lien externe. Donc, sur la page interne me permet de choisir la page d'accueil ou la page Services ou la page à propos ou l'une des pages détaillées du service. Donc pour celui-là, je vais choisir le nettoyage. Et pour le 1er, je vais juste mettre un comte extérieur ici. Donc, http wag queue dot io Ok, qui a sauvé. Et lorsque nous réafficherons notre page parce que nous n'avons rien modifié, un modèle, nous ne verrons pas encore ces changements. Revenons donc à notre modèle et créons un Lincoln ici pour créer une balise A. Le brouillon va être un peu de logique de modèle. Laissons ça pour la fin, je suppose. Et ici, mettons le texte de notre bouton. Nous avons un texan ici appelé le texte de lien de point de carte, et d'où j'ai eu ça était pour chaque carte en cartes. C' est de là que je reçois la carte. Il y a le texte du titre, le texte du lien d' image, la page interne, un lien externe. Je reçois le texte du lien d'ici, et je le jette juste là-dedans donc Allons-y, sauvegardez ça et rafraîchissez notre page. Et nous allons voir plus de détails pour plus de détails. Et en fait, c'est censé dire plus de détails. Mais ça a déjà été sauvé. Donc c'est trop tard. Ah, et maintenant nous devons vérifier si nous avons une page interne ou un orteil externe à utiliser . Alors faisons-le ici. On peut fondamentalement, pas vrai. Je vais écrire cela sur le long chemin et puis je vais tout pousser dans une seule ligne va , si la carte point interne page page point interne page que vous êtes l. Parce que c'est un objet de page et les objets de page ont toujours point u R l en eux, ils ont toujours la propriété UL. Ensuite, nous pouvons dire, LF carte point page externe, D'où cela vient ? Vous êtes là. Le lien externe est ce qu'on appelle. Ensuite, nous pouvons dire lien externe point de carte que l'on n'a pas de point UL parce que c'est juste un champ de texte normal. Et si c'est à ça que ça va ressembler maintenant, je vais commencer tout ça en une seule ligne. Le cinquième ISS et copiez tout ça et je vais jeter ça dans le brouillon A. Ici, c'est Allez-y, enregistrez et actualisez cette page. Et si nous regardons en bas à gauche, c'est en fait essayer d'aller à wag tail dot io. C' est parfait. C' est là que le 1er 1 était censé aller et celui-ci va aller à la page de nettoyage . Donc, maintenant, nous sommes en mesure d'ajouter des liens à notre champ de flux à l'intérieur de notre liste. Bloc peut aller à n'importe quelle page à l'intérieur du blanc, dire n'importe quelle page en dehors de wag toe. Maintenant, allons-y et rendons ce code un peu plus agréable à regarder, parce que si nous le regardons en ce moment, je veux dire, cela pourrait être lisible pour beaucoup de gens, mais pour moi, ce ressemble en quelque sorte à des ordures. Comme si tu me montrais ce code au début, oui, je le lirais, et je serais capable de l'analyser avec mon propre cerveau. Mais juste en regardant, je vais juste y aller. Qu' est-ce qu'il y a tout ce truc là-bas ? Ça n'a pas vraiment l'air génial. Je ne veux pas vraiment m'attaquer à ça. Alors allons de l'avant et un peu comme nous extraire tous, et nous allons mettre ça dans une nouvelle classe appelée une carte, et ça va être un bloc frappé, et ce que je peux faire, c'est que je peux prendre toute cette copie et coller, et nous ne pouvons pas l'utiliser dans ce format particulier. Mais ce que je peux faire, c'est que je peux utiliser mon éditeur pour m'aider à tricher un peu, et je peux à ses multiples endroits en même temps. Et on peut le faire. Nous pouvons sélectionner tous les blocs qui saisissent juste le bloc R. Prenons tous les blocs. Mais tout ça dans une nouvelle ligne, ça ne va pas marcher comme je l'avais espéré. Alors allons de l'avant pour cela sur un nouveau prêt. Débarrassez-vous de ces deux lignes. Bon, donc ici vous pouvez voir, j'ai juste mis tout en quelque sorte sur leur propre ligne, et ça ressemble beaucoup plus à notre bloc de titre. Il ressemble beaucoup plus à une page de queue de wag semble beaucoup plus sympathique Django, et il n'a plus besoin de ressembler à ça. Maintenant, nous ne allons pas réellement activer cela, comme c'est le propre champ de flux. On va juste utiliser ça à la place de tout ça. Donc ce que je vais faire, c'est que je vais supprimer cela, et je vais aussi supprimer cela et je vais simplement mettre la carte. C' est un bloc de liste de cartes. Maintenant, quand je retourne à mon navigateur et que je vais modifier cette page Ah, j'ai toujours toutes ces cartes ici. J' ai donc eu le titre, le texte pour représenter le texte du lien, page interne, toutes ces bonnes choses. Donc juste pour être sûr que cela fonctionne, allons de l'avant et jetons quelque chose de fou ici. Zèbre, zèbre, zèbre. Je ne sais pas pourquoi j'ai choisi un zèbre et nous allons de l'avant et rafraîchissons votre page et regardons ça . Donc maintenant, nous avons entièrement en fait, nous avons entièrement supprimé tout ce bruit, tout ce qu'aucun code facile, et nous l'avons mis dans sa propre classe. Maintenant, la bonne chose à ce sujet, c'est que nous pouvons réellement aller plus loin et nous pouvons retirer notre lien aussi parce que nous allons l'utiliser à plusieurs endroits différents. Donc je vais vraiment couper ça et je vais créer un cours de plus ici. C' est juste appelé un lien bloque point frappé bloc et jeter cela dedans Maintenant, un peu plus tard, nous pouvons même aller plus loin, et nous pouvons ajouter une validation à cela. Donc, chaque fois que quelqu'un utilise un lien sur n'importe quel Stringfield n'importe où, nous pouvons dire que la page interne ou le lien externe doit être. Malheureusement, l'un d'eux doit absolument être réglé. Actuellement, ils ne sont pas tous les deux requis, donc vous pourriez théoriquement avoir une section sans lien. Eh bien, tu ne veux pas vraiment ça du tout, donc on pourrait s'assurer que c'est toujours dit qu'on parlera de ça sur la route. Donc nous avons maintenant un bloc frappé pour un lien, et au lieu de notre carte ayant les trois champs ici et en quelque sorte de regarder assez long, nous pouvons savoir juste dire que le lien est égal à notre lien. Et est-ce qu'il y aura une sorte de texte d'aide ? Nous pourrions faire aider Texas égal à entrer un lien si nous voulions entrer un lien ou sélectionner une page  ? Donc maintenant, si on rembobine ça, notre bloc de cartes est un bloc de cartes, et c'est juste l'utilisation de ceci. Chaque carte a un titre, texte, image et un lien. Et maintenant ce lien a également un texte de lien, page interne et un lien externe. Allons de l'avant et éditons notre page. Nous allons voir un changement ici, alors que si je continue de défiler et de descendre, continuez à défiler vers le bas. On a une section de lien ici. Entrez le lien ou sélectionnez une page avec le texte du lien, page interne et le lien externe. Maintenant, si vous vous souvenez, ces liens fonctionnaient réellement et vous pouvez voir en bas à gauche ici. Je n'ai pas encore actualisé ma page. Ça marche. C' est sa façon. Dites à point io et si je rafraîchis ma page, nous allons voir que ce lien ne fonctionne plus maintenant. La raison en est parce que nous avons dit dans le bloc de carte, nous n'avons plus de voiture DOT lien externe. Nous avons la carte point lien lien externe ou lien de point de carte parce qu'il pense à un autre texte de lien de point de classe. Revenons donc à notre modèle et où il est dit point de voiture page interne ou lien externe point de voiture . On va attraper tous ceux et faire un point de carte de point de point de page interne de carte de point lié à point de page interne Vous êtes Oh, donc il devient un peu long. Étaient en quelque sorte de commencer à traverser notre champ de flux dans Wag Tell lui-même ou nous avons la carte qui lien point lien lien externe. Allons de l'avant et sauvegardons que rafraîchir notre page et vous allez voir que cela ne fonctionne toujours pas. Maintenant c'est à ce stade que vous pensez peut-être que quelque chose est cassé et que vous n'auriez pas tort de penser ça. Mais la raison pour laquelle cela ne se reproduit pas est à cause de ce que nous avons vu à l'origine. C' est en fait sa propre section maintenant, donc le texte du lien n'existe pas techniquement. Il est lié point lien texte. Il est lié point page interne. Il est lié point page externe. Donc si nous choisissons une page ici et celui-ci va juste aller à la page d'accueil et celui-ci va aller à wag tail dot io et mettre sur Lincoln externe ici. Http attendez jusqu'à ce que le point io sauvegarde dans la page d'actualisation et ils ne s'affichent toujours pas. Et je suis prêt à parier qu'ils travaillent et que je viens de faire une erreur. Allons-y et disséquons ça. Je parie que j'ai fait une erreur quelque part. Et si vous criez à votre écran en disant Caleb, je sais que votre erreur est génial, mais je vais devoir le trouver bas. Regarde ça. Il y a le lien. Pas de texte là-dedans. C' est intéressant. C' est probablement exactement la même chose ici. Ça va encore aller. Attendez jusqu'à ce point Io aucun lien. C' est donc mon erreur, et mon curseur était déjà dessus. C' était carte à point lien texte chéri. Allons-y. Enregistrez cette actualisation une fois de plus. Haut comme ça. Bien sûr, en bas à gauche, dit wag tail dot io. C' est là que ça va m'emmener quand je cliquerai dessus. Ça va me prendre à attendre jusqu'à ce que le point Io vérifie ça, et ce haut va m'emmener à la page d'accueil. Donc, comme un résumé rapide, ce que nous avons fait dans ces deux vidéos, c'est que nous avons créé un bloc frappé avec un bloc de liste à l'intérieur de celui-ci, créant effectivement une liste de blocs frappés. À l'origine, nous avons créé un bloc frappé assez long, puis nous l'avons en quelque sorte abstraite de lui-même dans sa propre classe. Nous appelons cette carte de classe et nous avons dit, juste faire une liste de blocs de cartes frappés. Mais nous avions aussi des liens dans ce bloc frappé dans le bloc frappé, et nous avons dit, c'est trop. Alors allons de l'avant et transformons ces liens en leur propre classe, leur propre bloc frappé, ce que nous avons fait ici. Et on les a jetés là-dedans. Mais maintenant, parce que nous avons pour chaque carte dans les cartes auto point et nous avons un lien allant à une autre classe dans notre modèle étaient en utilisant le lien de point de carte lien de point, carte texte, page interne de point chéri. Et il est vraiment juste dire pour chaque carte dans les cartes dot link dot link text et que, mon ami, est un bloc de liste. Donc encore une fois, la syntaxe qui contre assez bizarre je ne vais pas mentir. C' est assez bizarre, et c'est un peu déroutant au début, mais certainement donner un coup de feu pour essayer de faire quelques-uns des vôtres. Et quand vous commencez à en faire quelques-unes par vous-même, vous commencez à être vraiment sympa. Ce n'est pas tout ce que j'ai voulu. Ce n'est pas un beau champ de flux. Alors quoi ? Je vais à Dio est que je vais en fait disparaître cela et je vais jeter un tas de HTML et nous allons remplir ceci ensemble. Bon, donc je viens d'ajouter, Ah tas de HTML ici et on va remplir ça ensemble. Donc, c'est juste une sorte de bloc de bootstrap standard. Donc, il ne sera probablement pas le plus beau à ce stade. Oui, on y va. Ça va ressembler à ça. Donc, nous avons une carte sur la carte de gauche sur la droite parce que nous avons deux objets et notre bloc de liste . On a un titre, un texte, Ah, Ah, bouton et un lien. Et c'est censé aller quelque part. Alors allons de l'avant et faisons quelque chose avec ça. Alors, quelle est la plus grande victoire qu'on puisse faire ici ? Qu' est-ce qui va vraiment animer cet écran ? Ajoutons une image. Nous avons donc nos étiquettes d'image de queue de wag chargées. Allons de l'avant et ajouter notre image image image image carte point image. Et encore une fois, je reçois ça à partir de l'image de point de carte. Phil, j'ai un espace réservé ici pour 5 73 par 3 69 Faisons 5 73 par 3 69 Bien que je pense que ça a aidé. Le texte dit quelque chose de différent, n'est-ce pas ? Oui. 5 70 par 3 70 Faisons-le juste. 5 70 par 3 70 comme image et remplaçons ceci. Je suis G. N'êtes-vous pas moi et l'autel. Changeons que je suis GED tot pas vous, Earl dot lt Rafraîchir votre page. Regarde ça. Ça commence déjà à paraître beaucoup mieux. Prenons le titre suivant. On avait un titre ici. Ce sera juste le titre de point de carte, et encore une fois, je veux dire, ça pourrait être tout à fait logique pour toi, mais je vais vraiment conduire cette maison. Où puis-je obtenir la carte ? Ce titre de, je veux dire le bloc de liste. Il utilise un titre de point de carte de classe de carte. C' est là que je reçois ça à partir du texte que nous pouvons faire du texte à points de carte. Faisons en minuscules, et est-ce facultatif ? Parfois, je fais ce faux facultatif requis qui est, en fait, facultatif. Alors jetons une déclaration if ici. Faisons si le texte de point de carte. Donc, s'il y a une certaine valeur là-dedans et si et rafraîchissons notre page qui arrive assez bien jusqu'à présent. Ajoutons maintenant ce lien. Ce lien sera la carte de texte Lien point point le texte du lien point de lien. Et encore une fois, où est-ce que j'ai eu celui-là ? J' ai une liste de cartes ici. Je suis en boucle à travers chaque carte appelée. Encore quatre cartes en cartes. Il point de carte Link est ici, donc chaque point point de carte lien texte de lien point qui est de l'endroit où je reçois cela de. Et maintenant j'ai besoin de remplir ces liens les réfs d'âge. Alors faisons un peu de logique ici. Faisons Si le lien de point de carte est mort page interne, alors nous allons utiliser la page interne vous ou sinon nous allons faire le lien de point de carte de point interne page point Vous Earl autre. Si votre point de carte elliff reliait ce lien externe, est-ce ce que je l'appelais ? Lien externe et interne de la page. Allons de l'avant et faire carte caneton ce lien externe et enfin bientôt autre déclaration ici. Allons y aller. Absolument nulle part avec un signe numérique. Et si j'espère que j'ai toute cette syntaxe, non ? Si je ne l'ai pas fait, Jenkins va me le dire parce qu'il va y avoir un peu de cheveux sur la page. Bien sûr, non, tout a fonctionné. Bien que lorsque je survole ici, il dit hôte local de la gauche inférieure, Il dit hôte local lien point point lien lien externe. Quelque chose ne va pas bien qui devrait être juste là et vérifier ça. Ça va à Wag Tail. Tout ici a l'air sympa et personnalisé. Celui-ci va aller à la page d'accueil exactement comme je m'y attendais. Cliquez dessus. Assurez-vous qu'il va à l'exil point io et regardez cela. On a de jolies cartes sur des cartes reproductibles. Nous pouvons en ajouter autant que nous le voulons. Vous pourriez en ajouter des centaines ou des milliers si vous vouliez ralentir votre page après un petit moment. Mais vous pouvez en ajouter autant que vous le souhaitez. Je vais laisser ça à deux heures et aller de l'avant dans ce cours. Je pourrais en fait retoucher une partie de ce contenu aussi, donc vous pourriez ne pas vraiment voir dans la vidéo suivante que cela dit titre pourrait dire quelque chose d'un peu différent. Suivant. Je pense que nous devrions continuer à appliquer cette règle qui était en vigueur, et nous avons un petit moyen d'ajouter une certaine logique ici. Donc, au lieu de dire si la carte point lié page interne autre carte non liée sur le lienexterne lien yada, yada, yada, tous ces trucs, au lieu de dire que nous pouvons réellement raccourcir cela, Je pense que nous devrions aller de l'avant et le faire avec une chose qu'on appelle une valeur frappée. Nous le ferons dans la prochaine vidéo , donc une fois que , vous serez prêt à passer de cette tête là-bas et nous apprendrons simplifier certaines de cette logique de modèle. 22. Logic en StreamField: avec un bloc frappé, nous pouvons ajouter des valeurs personnalisées, logiques et sans avoir à le mapper à un objet de données stocké, ce qui est vraiment juste un discours de fantaisie pour dire que nous n'avons pas réellement besoin de stocker des données supplémentaires comme nous n'avons pas besoin Une autre équipe ici a appelé, comme vous, Earl. Ce que nous pouvons faire, c'est que nous pouvons ajouter une logique supplémentaire ici maintenant, Dans Django. Si c'était un modèle, cela ressemblerait à une classe. Vous êtes des mannequins, ce modèle. Et ce serait comme si tu avais une propriété ici sourde, quelque chose de retour. Tu sais, ta logique serait là, et tu reviendrais. Tout ce qu'il y a d'autre là-dedans. Fondamentalement, vous utiliseriez le décorateur à la propriété. Eh bien, nous ne faisons pas ça parce que nous n'utilisons pas à la propriété. On n'utilise pas de modèle jangle. Nous utilisons un bloc d'attente, section de champ extrême. Donc essentiellement, ce que je voudrais faire dans cette vidéo est de me débarrasser de presque toute cette logique et juste dire si la voiture chérie que tu es el existe, utilise-toi, Earl, quoi que ce soit. Donc, le temple qu'il n'a plus besoin de vérifier pour voir si sa page interne ou une page externe il doit être l'un ou l'autre, et nous allons les faire avec une petite chose cool appelée une valeur frappée. Donc, dans notre lien, nous pouvons réellement dire classe Meta. Donnez-nous une classe de valeur et nous allons nous donner une valeur Classe de valeur de lien, valeur lien. Non, cela n'existe pas actuellement. La valeur du lien n'existe pas, mais nous allons la faire exister. Donc ici, je vais dire que la valeur du lien de classe va maintenant exister. Les blocs pointent la valeur frappée, pas d'instruction Bloc ni un bloc de liste, mais d'instruction valeur. Et cela va ajouter une logique supplémentaire pour nos liens. Et donc ce que je veux cela à Dio, c'est au lieu de dire , point de lien page interne, je veux que notre modèle soit capable de dire point de lien vous Earl, et il va comprendre lequel est ici, et il va juste retourner celui qui est disponible. Maintenant, c'est en fait assez simple. Nous devons faire est de type. Vousêtes moi, ils sont sourds, Toi êtes moi, ils sont sourds, , Earl, et allons de l'avant et mettre cette page interne à la page interne va être moi. N' obtenez pas la page interne et parce que nous avons lié cette classe de valeur pour démêler ici, chaque fois que le point u R l va être appelé, il va dire, Hey, prenez cette page interne, quoi que ce soit, et stockez cela dans une variable que nous avons maintenant accès à cela, faisons le lien externe. Faisons lien externe est égal à auto-creusé encore ex lien éternel. Et j'aime les mettre dans leurs propres variables juste parce que cela semble rendre mon code un peu plus facile à lire un peu plus tard. Donc maintenant, je peux dire, si Page interne, parce que c'est une variable locale, je peux le faire. Si la page interne est en fait définie, je pourrais juste retourner la page interne, n'est-ce pas, Earl ? Et il ressemble exactement à ce qui est dans notre modèle que nous avons Si point de voiture lié sur la page interne , puis montrer la page interne de point de point de voiture Ici, il est point u r l. Nous pourrions faire exactement la même chose dans notre logique python. Nous pouvons également faire LF lien externe et nous pourrions simplement retourner cela aussi bien lien externe. Et enfin, si nous le voulions, nous ne pourrions rien rendre. Et si nous voulions lui à cela un peu, nous pouvons dire que cela retournera toujours une chaîne. Allons de l'avant et disons ça. Consultez notre terminal. n'y a pas de plaintes, donc je n'ai pas de fautes de frappe. J' espère que allons revenir à nos cartes ici, et je vais mettre ça près du titre juste pour ça. C' est un endroit que je peux voir mettre la règle horizontale là-dedans et faisons le lien de point de carte vous point Earl. , Maintenant, la raison pour laquelle j'utilise le lien de point de voiture que vous êtes seulement est des deux dernières vidéos où nous parlons d'un bloc de liste. Et maintenant, nous avons une vraie chaîne d'événements qui se passe ici, nous avons un bloc frappé appelé bloc de cartes , et à l'intérieur il y a un bloc de cartes de liste. À l'intérieur de chaque carte se trouve une image de texte de titre et un lien, et à l'intérieur de ce lien se trouve trois autres champs, texte de lien, page interne et lien externe. Mais nous disons aussi, Hey, il y a une classe de valeur ici, alors donnez-leur une logique supplémentaire pour que la classe de valeur cette valeur de lien vienne ici et chaque fois que nous faisons point u r l sur le lien lui-même. Donc, c'est juste comme ajouter que vous étiez tous est égal à une logique personnalisée. C' est juste comme ça que la logique personnalisée va maintenant chercher la page interne. Si ça existe, ça va nous donner la fille. S' il y a un lien externe à la place, ça va nous donner ça. Et s'il n'y en a pas un va retourner juste une chaîne vide. Comment aimez-vous ça pour une chaîne d'événements ? C' est plutôt bien, n'est-ce pas ? Donc maintenant, nous faisons carte point lié à u R L au lieu de point de voiture lié sur la page interne de voiture adulte chose point lien externe. Allons-y et donnons-nous Ah, vite, un peu de rafraîchissement. Celui-ci dit Slash, parce qu'il va à la page d'accueil. Et celui-ci dit http wag tail, ne Iook pas parce qu'il n'y a pas de page définie pour celui-ci. C' est un lien externe. Alors maintenant, allons nettoyer ça. Débarrassons-nous de ça. Et nous allons sélectionner toute cette logique de notre dernière vidéo, les trois sections, et nous pouvons simplement faire si la carte point lien u R L carte que vous êtes bien, sinon il n'y a rien là-dedans. Donc, en fait, nous n'avons même pas besoin de le faire du tout. Allons juste faire ça. Mettons toujours ce lien, Earl. Donc, même s'il n'y a rien là-dedans, c'est tout à fait correct. Bien sûr, celui de gauche va toujours à la page d'accueil, et celui de droite va toujours à wag tail dot io. Et à ce stade, nous pouvons réellement rendre notre modèle look et se sentir un peu plus agréable. J' aime faire cette partie parce que nous pouvons dire au début de notre étiquette A si le lien de point de carte vous point, Earl et allons à la fin de celui-ci et faire Et si et nous allons aussi chercher les balises de fermeture et fondamentalement faire exactement la même chose Si point de carte lien point u r l. Et je vais expliquer ce que je fais ici en une seconde. Et si oui, cela signifie que s'il y a un lien, vous, donc fondamentalement, si elle renvoie autre chose qu'une chaîne vide, donnez-nous un lien avec ce lien vous où l à l'intérieur de celui-ci et de même ici disaient, Si ce lien vous où tout existe existe, aussi, fermez ce lien. Donc maintenant, si nous sauvegardons cette page, nous ne verrons absolument aucune différence. Les deux ont des liens. Ce sont les deux liens. Vous pouvez voir en bas à gauche qu'ils changent d'avant en arrière. Mais juste pour le plaisir, Z va de l'avant et se débarrasser de celui qui renvoie à la page d'accueil. Celui qui est Zebra, Zebra Zebra, et celui-ci va à la page d'accueil. Allons éclaircir ce choix. Donc, il ne va pas à la page d'accueil, et il ne va pas à aucune page externe ou interne. C' est Cliquez sur publier et actualiser notre page, et celui-ci n'est pas un lien. En fait, il a cassé quelque chose là-bas, là-bas, et c'était parce que j'essayais d'être fantaisie et d'éditer trois endroits à la fois. Et bien sûr, la carte à gauche n'a plus de liens nulle part, et la carte à droite le fait toujours. Et c'est ainsi que nous ajoutons une logique supplémentaire à nos champs de flux en utilisant une valeur de structure. Maintenant, il n'a pas besoin d'être juste avec un lien. Vous pouvez le faire sur n'importe quel bloc frappé du tout. Tout ce que vous avez à faire est de faire de la valeur. La classe de soulignement est égale à ce que votre valeur de lien va être votre ou vraiment quelle que soit la valeur frappée va être appelée ce nom de classe, et vous pouvez ensuite saisir vos valeurs de n'importe quel champ que vous avez écrit. Ensuite, vous pouvez effectuer une certaine logique et retourner tout ce que vous voulez. Personnellement, je pense que c'est une fonctionnalité fantastique que je ne vois pas assez là-bas. J' aime vraiment, vraiment celle-là. Je pense que c'est une façon agréable et propre de donner à vos champs de flux un peu de logique supplémentaire sans encombrer votre modèle. À ce stade, je recommande fortement de jeter un oeil au code source, même se sentir libre de voler totalement mon code source et juste bricoler avec lui. Expérience. Essayez de le casser si vous le souhaitez, car il y a quatre sections à cela. Il y a le bloc de cartes. Il y a le bloc de cartes, il y a le bloc de liens. Et puis il y a le lien. La valeur a frappé la valeur, donc certainement donner un coup de feu. Amuse-toi encore un peu avec ça. N' aie pas peur de le casser. Et quand vous serez prêt à passer au prochain champ de rêve. Allons de l'avant et créons un champ de flux où nous allons avoir une image et du texte. 23. Bloc de texte: Bon, prenons du recul et ne travaillons pas avec quelque chose de si compliqué. Liste des blocs. Ils ont, Ah, beaucoup de parties, et c'est assez facile de l'étendre. Comme nous l'avons vu dans les trois dernières leçons, revenons à un bloc frappé régulier et ajoutons simplement une image peut-être quelques options d' alignement d'image . Nous allons réutiliser le lien que nous avons utilisé dans notre création dans la dernière vidéo, et c'est aussi ajouter une image. Donc d'abord, allons de l'avant et ouvrons nos blocs de flux fichier de tarte point, et je vais l'effondrer entièrement. Rendez cela juste un plus petit, et peu importe où vous voulez le mettre. Je suppose que je pourrais mettre ça en bas. Je sais que je veux créer une nouvelle classe, et je vais juste appeler image et bloc de texte parce que je ne veux pas les nommer de façon très créative. Je veux nommer ces Lee verbeux, que les gens sachent exactement ce qu'ils regardent. Ce sera un bloc frappé, un bloc frappé régulier, et je sais que ça va être une chance parce qu'il va avoir plusieurs valeurs ici. Donc, il va avoir un alignement d'image d'image. Donnons à cette section un titre, du texte et un lien. Eh bien, nous savons que Link est déjà terminé. Lien est égal à lien. D' où vient ça ? On a créé un cours ici appelé Link. On l'a utilisé dans notre carte. Nous pouvons maintenant nous réutiliser partout. C' est un bloc frappé, et il a déjà une valeur personnalisée appelée dot u R L. Donc maintenant je peux l'utiliser n'importe où. Donc celui-ci, quand il s'agit d'ajouter mais dans le texte, la sélection d'une page de queue de wag ou d'une page externe sont copier et coller un lien vers une page externe. C' est déjà fait. C' est trois champs sur une ligne. C' est une image agréable et facile. On l'a déjà utilisé. Sélecteur d'image, bloc, et nous pourrions donner de l'aide. Texte sur celui-ci. Cela va être nécessaire aussi. Donc, disons que l'image sera automatiquement recadrée par magie. Cela va être une image plus grande. Donc je crois que c'est 7 68 Non, j'ai dit ça mal. 7 86 60 Cela semble bizarre. 7 86 par 552 pixels. Si je me souviens de la conception correctement alignement de l'image, cela va être un nouveau. Cela va être blocs de choix de points maintenant. Un bloc de choix semble assez intéressant. Donc on a des choix ici, et ça va être deux doubles, en gros. Donc vous avez des choix que nous pouvons mettre à gauche et à gauche, et je vais vous dire ce que cela signifie en secondes avec la gauche, un à droite, un à droite et à droite, et c'était très déroutant ce que j'ai dit. Donc, chaque problème a deux valeurs dedans. Le gauche est ce que nous allons avoir accès au modèle interne et le bon est ce qui va être affiché afin que nous puissions dire image à gauche. Totti gauche à gauche et image à droite. Cela le rend un peu clair. Nous pouvons également lui donner une valeur par défaut, donc la valeur par défaut va être laissée. Disons que l'image est toujours à gauche, et comme toutes nos autres, nous pouvons aussi nous aider. Texte ici. Nous pouvons également diviser cela en de nouvelles lignes. Donc ça a l'air un peu plus cohérent. Aide Texas égal à l'image sur la gauche avec du texte sur la droite ou l'image sur la droite avec du texte sur la gauche. Notre titre va être blocs Tut char bloc. On a déjà vu celle-là. Donnons à cela une longueur maximale de quelque chose comme 60 caractères et aide la longueur maximale du texte de 60 caractères. Le texte est égal au goujon de bloc. Vous voulez HR Bloc Oui, ne va pas être très long. Texte. Donc HR bloc avec la longueur maximale de ce qui était autrefois un tweet. 140 caractères, et nous allons rendre cette option obligatoire est faux et nous avons un Lincoln ici. Ensuite, allons-y. Spécifiez certaines méta options. Où va aller ce modèle ? Disons des flux. Image et bloc de texte point html et icône. Je vais lui donner une icône d'image, et l'étiquette va être image et texte avec un N pour cent au milieu. Donc, il ne dit pas et il dit juste le texte de l'image esperluette. Maintenant, c'est tout groovy. Et j'espère que je n'ai pas de fautes de frappe. Moi terminal ne le pense pas. Je vais copier cette image de valeur et le bloc de texte juste ce texte et je vais ouvrir les modèles maison cette tarte et dans mon corps ici, où j'ai le champ de flux de titre et le champ de flux de carte, je vais juste ajouter des blocs d'image et de texte point bloc d'image et de texte. Maintenant, il n'y a pas de modèle actuellement, mais allons de l'avant et voyons à quoi cela ressemble dans notre backend. Lorsque nous éditons notre page, quelqu'un qui a tort il bloc n'est pas défini. Oui, c'est exact. Bloc n'est, en fait, pas défini ses blocs. Il est rafraîchir notre page, et quand je clique sur ce plus, nous avons maintenant l'image et le texte remarqué l'esperluette là qui est l'étiquette. Donc maintenant, nous pouvons sélectionner une image, n'importe quelle image. C' est comme celui-là. Souhaitons-nous aligner l'image vers la gauche ou l'alignement de l'image vers la droite ? Laissons l'image va être à l'exemple de titre de gauche ici. Exemple de textos ici. Exemple de texte ici. Lien plus de détails. Oui, allons-y avec plus de détails. Une page interne Allons avec la brillance. En fait, changeons une partie de cela. C' est un titre, les fusées les plus propres à exister, et le texte va dire qu'aucune fusée n'a jamais été aussi brillante. C' est tellement brillant qu' il est presque sans frottement. Allez-y et sauvegardez ça. Publiez notre page et encore une fois lorsque nous appuyez sur Actualiser. Cela va chercher un modèle de champ de flux qui n'existe pas. Oui, et il cherche l'image et le bloc de texte, et nous savons que ça va chercher dans tous ces endroits différents pour ça. Donc, continuons et faisons cela exister sous mon projet ROCKETMAN ou quel que soit votre projet va être appelé ou appelé sous les modèles sous les flux, créons un nouveau ici. Image et bloc de texte point html. Non, ce point. n'y a rien ici que nous n'ayons pas traité à l'exception de l'alignement des images. Alors abordons d'abord l'alignement de l'image. Et puis on va, euh, je suppose qu'on va passer par toutes les autres et ressentir ça. Je ne rendrais pas ça sympa. Regardons son alignement d'image. Tout ce que nous avons à faire pour cela C'est un alignement d'image auto-point, et cela va correspondre à ce texte juste ici et encore. Lorsque vous êtes dans un champ de flux, il peut s'agir d'un point de valeur, d'un alignement d'image ou d'un auto. Cet homme de ligne de l'image Alors disons l'alignement. Donnons ça en H 1. Et quand nous actualisons notre page faire, faire, faire, faire, il va être aligner à gauche maintenant cela n'a rien à voir avec cette section. Ne soyez pas confus par ça. Ce sera sa propre section ici. Ce n'est pas une section complètement différente qui existe déjà. Ok, donc ce que je vais faire ici, c'est que je vais disparaître. Je vais corriger un tas de html et ensuite nous allons remplir les pièces manquantes ensemble. Ok, donc j'ai écrit un tas de HTML ici, et nous allons remplir les morceaux manquants. Mais jetons un coup d'oeil à ce que cela regarde en ce moment. Donc, quand je rafraîchis ma page, j'ai ici une image qui a un lien. Vous pouvez voir qu'en bas à gauche il y a un titre, du texte et un bouton facultatif. Bien qu'il soit actuellement codé en dur, ce n'est donc pas facultatif. C' est définitivement là à chaque fois. Nous devons donc faire un peu de travail ici. Nous avons besoin d'orteil, fondamentalement supprimer tout ce qu'il faut faire et supprimer cette image d'espace réservé. Donc, nous allons juste travailler sur celui-ci à la fois, et regardons chacun des choses à faire ici. Donc CC I 80 image et section de texte. Je veux que nous soyons alignés. Donc, cela va être l'alignement de l'image auto-point et ceci est flex box. Donc, cela va être à gauche ou à droite, et cela correspond juste avec le CSS. Ensuite, faisons la photo. Je sais qu'il y a un huit rugueux ici, mais voyons d'abord la photo. Donc, nous voulons l'image auto point Comment on l'a appelé ? Pas seulement l'image. C' est facile. Nous voulons nous assurer qu'il remplit toujours exactement 786 pixels par 552 pixels comme je suis G et je vais remplacer cela par un point d'image TRL. Euh, l'autel doit être remplacé. Même s'il n'y a pas tout le texte là-dedans, il est toujours bon d'avoir au moins les anciens attributs. Allons de l'avant et actualisons cette page. Quelque chose a cassé. Oh, n'est-ce pas bizarre ? Balise de bloc non valide sur l'image de la ligne 11. Avez-vous oublié de vous inscrire ? Chargez cette prise. Tu as absolument raison. Je l'ai fait. Ajoutons des balises d'images de queue de wag. Et rappelez-vous, chaque fois que nous utilisons la balise Wag Tail, nous devons toujours charger. Attendez que les images soulignent les balises. Maintenant, nous allons rafraîchir. D' accord, accord, accord, ça n'a pas l'air mal. Ok, faisons le texte du titre et le bouton. Donc le titre est juste ici. On va au titre de dio autopoint. probablement comme ça que je l'ai appelé. Oui, le titre suivant sera le texte. Celle-ci est facultative. Donc, parce que c'est facultatif, si le texte auto-point et si et ici, faisons le texte auto-point ressemble que les fusées les plus propres à exister. Aucune fusée n'a jamais été aussi brillante. C' est tellement brillant qu' il est presque sans frottement. C' est un peu à faire là-dedans. Maintenant celui-ci va être un peu différent. Ce ne sera pas un texte de lien auto-point. Ça va douter de soi. Lien point lien lien texte, texte. On y va. Et la raison en est que le lien est égal à lien. Eh bien, c'est une autre classe, donc vous pouvez en quelque sorte penser que le lien est égal à, et puis il va entrer en quelque sorte comme une sous-section de lui-même et son texte de lien obtenu est égal à et en quelque sorte de. Si vous pensez à ce sujet comme ça, c'est le lien pensé texte de lien est égal à, et maintenant nous devons ajouter nos liens dans les années. Trouvons tout ça. Il devrait y en avoir quelques-uns là-dedans. Oui, deux d'entre eux. Donc ça va toujours être si point lien point u R l. Et nous obtenons celui-ci de notre valeur frappée. Nous avons donc un lien que nous utilisons ici texte de lien, page interne, lien externe et utilise une valeur de lien ou une valeur frappée. Et il nous donne la valeur point u R L. Il s'agit donc d'une logique de champ de flux personnalisée. Cela n'existe pas réellement dans le champ de flux, mais dès que le champ de flux est rendu sur la page, il existe. Donc, nous avons accès au lien que vous êtes l Maintenant, Enfin, nous devrions rendre ces liens facultatifs. Et la raison pour laquelle nous allons les rendre facultatifs est parce que nous avons une page interne un lien externe, et ils ne sont pas tous les deux obligatoires. Ils sont tous les deux facultatifs, donc il y a un moyen pour quelqu'un d'ignorer ces deux champs et il n'y aura pas vraiment de lien. Alors allons-y et résolvons ce problème en ce moment avec si auto point lié que vous alliez vous assurer que cela existe et si et nous voulons faire la même chose avec notre balise de fermeture et si et que c'est nettoyer cela, il y a un plus. Où êtes-vous ? Juste là. Vous devez lier existe. Afficher le lien. Et si nous allons de l'avant, accord, donc cela va maintenant être lié à notre service brillant. Donc, sur notre page d'accueil, nous avons maintenant une bannière et nous avons un champ de flux ici qui indique les fusées les plus propres à exister avec le lien qui va vers plus de détails. Et quand nous cliquons dessus, il va à notre service brillant. Et c'est ainsi que nous créons un autre champ de flux, un champ de flux de bloc frappé avec un alignement d'image de sélecteur d'image, qui est techniquement un texte de titre de bloc de choix. Et nous réutilisons déjà les composants de liaison dans deux sections. Donc, nous faisons vraiment usage de ça 24. Bloc radio: Oakley Doak. Au début de sa dernière vidéo, nous avons créé l'alignement d'image avec le bloc de choix. Maintenant, un bloc de choix peut être génial si vous avez plusieurs choix. Mais si vous avez seulement deux choix, parfois vous voulez juste, comme une option de sélection radio où c'est comme vous dans sélectionner l'un ou l'autre avec de petites boîtes . Donc dans cette vidéo, je vais te montrer comment faire ça. On va ouvrir notre bloc. Stop I. Et dans la dernière vidéo que nous avons créée, l'alignement de l'image est égal au bloc démarrages Chooser bloc. Nous allons en fait remplacer ça par plus de, ah, ah, bloc de sélecteur de radio. Donc je vais d'abord écrire le code. Ensuite, nous allons faire quelques importations et ensuite nous allons remplacer cela. Alors allons de l'avant et écrire bloc de sélecteur de radio de classe. Je suppose que ce n'est pas vraiment un sélecteur comme un sélecteur de page ou je suis dans les chaussures. Ou peut-être n'appelons pas ça. Appelons ça un bloc radio select block dot choice block et vous pouvez remarquer que c'est le même que ceci, et maintenant nous héritons directement de ceci. Maintenant, si nous le voulions, nous pourrions continuer à disséquer ce code source. Nous pourrions faire un clic droit et aller à la définition. Ou vous pouvez voir le code source sur Get Hub à get hub dot com tel wag queue slash wag queue Et ici nous sommes allés. Le choix est un peu de ah là-dedans, a un tas de trucs qui se passent. Faites des choix coupables et vous pourriez passer peu de temps ici. Je passe juste en quelque sorte par le code source n'est pas si longtemps si vous vous débarrassez de toutes les chaînes de dock et des commentaires. Mais si tu le voulais, tu pourrais toujours l'explorer. Je vous encourage toujours à regarder le code source, même si cela n'a pas de sens au début. Il est bon de juste lire dessus, parce que de temps en temps, quelque chose clique. Faisons définitivement. On a vu cette fonction. Alors passons dans les arts et les quarks. Exécutons super sur cela donc il fonctionne déjà à partir du bloc Choice. Et passons aussi dans n'importe quelle sorte de nos œufs et chœurs qui vont être passés là-bas sont en remorque. Celle-là. Ah, et puis définissons un widget de champ si je me souviens de cela correctement. Il est champ auto point que widget est égal aux formes. Donc, c'est une forme jangle qui allait importer ceci en une seconde. Je crois que c'est une sélection radio. Et puis nous pouvons dire que les choix vont être quel que soit le champ de soi fait, ce widget que les choix sont. Maintenant, si vous ne nous comprenez pas tous parce que peut-être vous êtes nouveau à Django ou peut-être que vous ne connaissez pas tout ça. Alors honnêtement, n'avez pas l'impression d'aller apprendre tout ça. Et si vous aimez cette fonctionnalité, n'oubliez pas que vous pouvez simplement la voler, juste pour mon code source, il est disponible pour vous. Maintenant, ce que nous allons faire est d'importer ceci. Je vais aussi réparer un peu de mon genre était là. Tu n'as rien vu. y avait pas de fautes de frappe. ce moment, je vais faire défiler jusqu'à ma page et je vais faire à partir des formulaires d'importation Django et je vais revenir jusqu'à l'endroit où sont les formulaires. Et où sont chemin au lieu de blocs ? Bloc de choix de démarrage. Tout ce que je vais faire, c'est le remplacer par ce texte ici. Bloc de sélection de radio Allons de l'avant et changeons cela en bloc de sélection de radio. C' est, en son cœur, un bloc de choix. Tout ce que nous avons dit était utilisé un widget de champ différent et donc tout le reste que nous appliquons par défaut, aide, texte et choix. Ils vont tous être appliqués déjà. Quoi qu'il en soit, sont le mot clé sont des oeufs qui passaient en elle, qui est en cours d'exécution super, qui va fonctionner super sur bloc bloc Choice. Donc tout est encore passé en amont. Allons de l'avant et sauvegardons ça. Quarks n'est pas défini. Oui, parce que ce ne sont pas des chorales, ses concerts de base qui semblent plus sains. Allons de l'avant et rafraîchissons notre page. Et regarderez-vous cette image d'alignement d'image, l'image de gauche à l'image de droite image de gauche à droite, et rien ne va changer dans votre modèle. Tout ce qu'on a fait, c'était d'échanger les widgets qui attendaient jusqu'à ce qu'ils utilisaient pour une sélection radio. Donc, au lieu d'une liste déroulante, nous avons dit, utilisez une sélection radio. Si vous aimez ce genre de chose, n'hésitez pas à l'utiliser. Si vous pensez que c'est tout simplement inutile dans une sorte de perte de temps en tant que développeur, ignorez-le et passons à la leçon suivante 25. Blocage d'appel à l'action: Regardons la création d'un autre nouveau champ de flux, un champ de flux d'appel à l'action. Disons que quelqu'un est sur notre page et que nous essayons de les vendre sur nos services d'entretien des fusées , et nous voulons qu'ils nous contactent. Eh bien, actuellement, nous faisons défiler la page vers le bas. n'y a pas de moyen réel pour eux de nous contacter. Finalement, nous pouvons créer un patient de contact. Nous le ferons. Nous y arriverons certainement. Mais à ce stade, nous voulons juste créer une sorte d'appel à Action Block. Maintenant, ce sera juste un titre et un lien très basiques et littéralement rien d'autre. Alors allons de l'avant et ajoutons ce bloc. Maintenant, je vais fermer toutes ces choses et faire semblant que je recommence à zéro . Allons-y. Blocs ouverts barre oblique. Non. C' est faux. Allons de l'avant et ouvrez les flux slash bloc. Arrêtez I Et au bas de ma page, je vais ajouter de la classe. Appeler au bloc d'action, bloc de départ a frappé bloc et je suis juste de faire de la place pour travailler là-bas. Ok, donc j'ai dit, il y aura un titre qui sera quelque chose et un lien, et ça va être quelque chose. Eh bien, nous savons que le lien est déjà réglé, si cool que c'est fait. Et le titre va simplement être un bloc char, et nous allons nous donner une longueur maximale de 200 pour que ça puisse être assez long. Si nous voulions que ce soit et aider le Texas à dire la longueur maximale de 200 caractères, allons de l'avant et ajouter Notre modèle de classe meta va être des flux slash Eh bien, faisons celui-ci un peu différemment. Il va être à la recherche d'un appel à l'action bloqué html. Et en fait, voyons juste ce qu'il va chercher. Juste comme preuve. Ne lui donnons pas un modèle. Je vais le donner comme une icône, et ensuite je vais lui donner un label appelé Appel à l'action. En fait, maintenant, c'est génial. Cela ne fait rien, cependant, parce que nous devons aller sur notre page d'accueil et activer cela Donc dans son corps, nous avons juste à taper. Je ne sais pas. C t un appel de démarrage de bloc à Action Block. Et rappelez-vous que ce Texas n'est pas utilisé par nous en ce moment, il y a un moyen de faire une boucle à travers chaque champ de flux et de détecter quel flux il se sent , mais nous ne allons pas le faire. Voyons le terminal terminal dit qu'il n'y a pas de problèmes. C' est une bonne nouvelle. Allons de l'avant et éditons notre page d'accueil et nous devrions voir un appel à l'action bloquer ici. Mais Babu, il s'appelle Action, et l'action va juste être quelque chose dans les longues lignes des meilleures fusées dang jamais causées. Je ne sais pas. Je suppose qu'on fait des roquettes maintenant. Probablement pas. Je vais changer. Je me contente un peu plus tard. Euh, je veux faire ça brillant. Non, ne faisons pas briller. Faisons le nettoyage. Et passons des meilleures fusées Dang jamais à quelque chose d'un peu plus applicable ici. Était-il une fusée dans l'espace récemment ? Fais-le nettoyer. Nettoyer votre fusée maintenant peut imaginer qu'ils se salissent avec tout ce carburant utilisé et, euh, vous savez, entrer et sortir de l'atmosphère et tout ça. D' accord, c'est sauvé. Rafraîchissons votre page. Et regarderais-tu ça ? En fait, il ne dit pas que le modèle n'existe pas. Il est juste de le rendre directement à la page. Non, c'est cool et tout. Mais on ne veut pas ça. Nous voulons que cela ait réellement un champ de flux approprié. On va dire qu'il doit vivre chez appelé Action. HTML bloqué. Et quand je rafraîchis cette page maintenant, nous allons voir qu'il n'existe tout simplement pas. Zone Nous avons vu ça. Oh, mon Dieu. 100 fois maintenant, allons de l'avant et faisons en sorte que cela existe. Rocket Man modèles, flux et nouvel appel de fichier à l'action bloc point html. Bon, donc j'ai juste ajouté mon appel à l'action Block là-dedans, et vous pouvez vraiment voir ce que j'ai fait. Il y a donc un titre et il y aura un lien. En fait, ne pense pas que Link soit tout à fait juste. En fait, c'est censé être une classe. Ça a l'air mieux. Ok, maintenant nous avons juste besoin d'ajouter notre titre à nouveau. Cela vient d'un champ de flux. Donc, un champ de flux vous affaiblir le titre de point ou le titre de point de valeur. Allons de l'avant et faisons le titre de point auto pour ne pas être confondu avec un titre de page. Et parce que celui-ci est un lien qui vient de l'action appelée, Donc lien auto point lien va nous donner texte de lien, page interne, lien externe et à travers la logique de champ de flux douanier Vous êtes l donc ici, nous pouvons dio auto lien de point. Tu ne l'es pas ? Non, c'est le mauvais. Texte du lien. Et pour la fille, c'est là que nous faisions Self Dot Link que vous êtes Huzzah ! Votre fusée et votre espace ont été récemment ? Fais-le nettoyer. Nettoyez votre fusée maintenant et il nous amène à notre service de nettoyage de fusée page beauté. Maintenant, ça a été amusant, mais, euh, je pense qu'il est temps de commencer à entrer dans quelques types différents de champs de flux et aussi jouer avec des choses comme un bloc de sélecteur d'extraits où nous pouvons réellement sélectionnez un témoignage . 26. Testimonies et échantillons: Il était une fois, beaucoup, beaucoup de vidéos, nous avons créé cette section de témoignages. Nous avons eu des citations de Yoda et Chewbacca, et puis nous avons également enregistré sont un témoignage comme un extrait, et ce témoignage était en fait un modèle jangle. Cela n'a rien à voir avec Wag Tail, sauf pour le fait que nous l'avons enregistré dans le Wag Tell Edmon et l'avons enregistré comme un sniff it. Maintenant, les extraits sont sympas parce qu'ils sont des morceaux de données comme celui-ci que nous pouvons sélectionner en utilisant une interface utilisateur graphique gooey. Et dans cette vidéo, c'est exactement ce que nous allons faire. Nous allons permettre aux gens de sélectionner un témoignage et de créer un champ de flux de témoignages. Mais au lieu d'avoir à écrire le champ de flux encore et encore parce que peut-être le même ,le même témoignage va être utilisé sur quatre pages différentes. , Nous allons simplement dire, Sélectionnez l'un de ces, et quand nous le modifions sur une page, il le changera sur chaque page. Et allons juste aller directement à notre page d'accueil modèles que tarte. Et ici, nous allons directement à un nouveau champ de flux, et celui-ci va être appelé un témoignage parce que nous allons utiliser un champ de flux qui est juste un type particulier. Par exemple, nous avons ce bloc de titre. C' est un bloc frappé et il n'a qu'un seul champ. Alors pourquoi utilisons-nous des blocs qui ont frappé le bloc alors que vous savez que nous pourrions utiliser des blocs de char place ? Maintenant, si nous avons plus d'un champ, comme dans la carte ou notre bloc d'image et de texte, même dans notre appel à l'action Block ? Bien sûr, il est logique d'utiliser un bloc frappé, mais quand vous n'avez qu'un seul champ, il est parfois plus facile de ne pas utiliser un bloc frappé tout et d'utiliser ce que Wait till nous donne hors de la boîte. Donc, ce que nous allons faire ici, c'est que nous allons dire que notre prochain champ de rêve est appelé témoignage, et nous allons utiliser un bloc de sélecteur d'extraits, qui ne provient pas de notre fichier de blocs et en haut de notre page ici. Nous voulons faire à partir de wag queue extraits de points blocs de points, extrait d'importation, bloc utilisateur. Et si on regarde notre terminal, voit clairement qu'il se plaint. Nous avons un argument de position. Modèle cible manquant. Il ne sait pas quel extrait sélectionner. Maintenant, même si notre site n'a vraiment que celui ici, nous devons quand même indiquer quel modèle choisir. Maintenant, c'est vraiment facile à spécifier. Ici, nous pouvons simplement dire, juste à l'intérieur du bloc, le passer directement. On peut dire que le modèle Target sera. Quel modèle voulons-nous utiliser ? Eh bien, dans une corde, donc on va charger paresseux ces anguilles de témoignage. Puis-je épeler des témoignages de tableau ? Ne testez pas Moughniyah Will. Je n'ai aucune idée si j'épelle ce droit. Mon terminal le saura, bien que cela semble OK. Allons de l'avant et c'est la page d'accueil de l'éditeur Page d'accueil de la page qui défilent vers le bas, nous avons un nouveau ici appelé Témoignage nous donne automatiquement le nom et ce nom vient simplement d'ici. Rendons ça juste un peu plus petit. Ce nom vient d'ici, donc il est en fait utilisé à ce stade parce que nous ne lui donnons aucune sorte d' étiquetage supplémentaire . L' icône est l'icône de l'extrait, juste quelques feuilles qui vient par défaut et maintenant il va nous dire de choisir un témoignage, et à ce stade, allons choisir Chewbacca classique. Allons de l'avant et publions, et quand nous chargeons notre page, ce ne sera pas tout à fait ce que nous attendons. On va faire défiler ici et cool. Nous voyons le témoignage, mais nous ne pouvons pas en faire trop usage à ce stade. Alors allons de l'avant et passons nous un modèle personnalisé aussi. Et à ce stade, je pense que c'est plus facile si on met ça sur des lignes séparées. Donc, le premier paramètre, le premier argument de mot-clé paramètre positionnel, est plutôt le modèle cible. Le 2ème 1 que nous allons lui donner est un modèle, et ceci, à ce stade n'est pas différent. Puis passer un modèle dans la méta de classe. Donc, nous allons simplement dire que ce besoin temporaire de vivre dans les flux slash oui, Imo nial block dot html Et maintenant, quand nous actualisons notre page, nous allons voir quand il se charge. Au fait, si votre côté se charge vraiment lentement comme ça et que vous êtes impatient avec elle, c' est cette chose ici, vous barre d'outils de débogage Django. C' est un outil de profilage, donc il va enregistrer toutes les requêtes, tous les fichiers statiques, tout ce qu'il contient. Si cela prend trop de temps, vous pouvez simplement aller dans vos réglages élevés et le désactiver. Donc, nous voyons le modèle redouté n'existe pas d'erreur. En fait, il n'est pas redouté. On sait exactement ce qu'il fait. Essaie de chercher un bloc de témoignage dans toutes sortes d'endroits différents. Faisons en sorte qu'il existe. Donc, dans nos flux, allons de l'avant et ajouter un bloc de témoignage html point. Et à ce stade, il est difficile de comprendre à quoi nous avons accès parce que c t un bloc interne Nous avions un titre, donc c'était le titre de doute de soi ou dans notre bloc de texte. Je crois que c'était juste du texte. Oui, donc interne dans notre modèle, nous aurions juste dit texte de point auto ou texte de point de valeur. Mais que faisons-nous dans un bloc de témoignages ou un bloc de sélecteur d'extraits ? Plutôt quand on ne sait pas ce qui est donné, alors ce qu'on peut faire c'est commencer à expérimenter. La première chose que nous pouvons faire est de passer en soi. Voyons ce que cela revient. Vous pouvez voir qu'il dit ordre par Chewbacca. Eh bien, ce n'est pas le témoignage. Le témoignage est G R R R R R R R et l'attribution est Chewbacca. Donc, si on ouvre les témoignages, le dossier des modèles, on verra qu'on a une citation ici et l'attribution. Nous avons également soulignement str underscore soulignement. Donc, dunder enchaîné sous Et c'est ce qu'il retourne retourne la représentation de chaîne de lui-même. On ne veut pas ça. La bonne chose à ce sujet est chaque fois que vous voyez un objet renvoyant la représentation sous forme de chaîne de lui-même, c'est parce que c'est l'objet entier qui est retourné. Il ne sait pas si vous voulez voir le devis ou l'attribution Fielder ou que voulez-vous voir ? Donc ça dit juste, Ok, eh bien, je vais te donner le nom que tu lui as donné et c'est pour ça. Et c'est exactement pour ça que nous avons mis ça plus tôt était, euh pour aider, mais aussi ça a l'air un peu plus agréable. Alors allons de l'avant et essayons lui-même DOT citation. Et quand nous actualisons votre page, elle est là. Il y a citation et attribution, et une fois de plus, je vais rafraîchir votre page et il dira Chewbacca comme ça. Bon, donc je ne voulais pas que tu me regardes, est-ce pas ? Tout ce HTML ennuyeux teste le fait que j'ai fait quelques fautes de frappe, mon CSS qui n'a pas tout à fait fonctionné de la bonne façon la première fois. Alors je me suis évanoui, évanoui, et on va les remplir ensemble. Jetons donc un coup d'oeil à ce que cela ressemble maintenant avec juste le texte à faire dedans. Nous avons un devis à remplir et une attribution que nous devons remplir. Donc maintenant que nous savons comment accéder à cet affaiblissement, il suffit de faire une citation auto-point et ici nous pouvons faire l'attribution de point auto et encore une fois, je reçois ces directement à partir de l'extrait lui-même parce que nous avons un témoignage ici. C' est un mannequin. C' est un modèle jangle, mais il est enregistré comme un extrait et nous n'avons pas utilisé de bloc frappé. Nous avons dit, il suffit de sélectionner ce morceau de contenu. Sélectionnez ce témoignage. Juste ce témoignage brut. Ce modèle de témoignage devient maintenant citation sans citation soi ou la valeur. Alors vérifions ça. Oh, ouais, ça a l'air plutôt bien. Ok, on a encore une chose ici parce que je le veux vraiment. Qu' est-ce qu'il y a à un tableau de bord ? Commencez la longue. Je crois que c'est long. Oui, ça l'est. C' est Ah petit tableau de bord. Et maintenant, nous avons un bloc de sélecteur d'extraits, et à tout moment, nous pouvons changer les témoignages. Faisons deux exemples ici. Allons éditer ce témoignage. Quoi d'autre est à Bacchus dire ? Ah, il tire une arme alors il est dit P p p u que vous vous rafraîchissez. Remarquez comment je n'ai pas changé la page. J' ai changé les données du témoignage. Je n'ai pas changé la page du tout. Et quand je reviens à la page ici, eh bien, c'est l'ancienne parce que j'ai chargé les pages à peu près en même temps. Si je choisis un autre témoignage, regardez ça. Je peux sélectionner, donner aux gens vous espèrent par Ibaka ou faire ou pas. n'y a pas d'essai Biota. Donc je veux dire, c'est comme cette publication. Actualisez la page et cela changera également. Huzzah ! Maintenant, nous avons deux façons différentes de modifier les données de notre site Web. La bonne chose à ce sujet est, si vous le souhaitez, vous pouvez ajouter ce bloc de sélecteur d'extrait à votre page flex à votre page de service à une future page bloguée de la vôtre. Et si tu devais le faire, je ne sais pas accidentellement faire une faute de frappe ici. Vous n'auriez pas besoin d'aller vous changer sur quatre pages différentes. Tu pourrais littéralement aller ici. Modifiez-le une fois, et il le changera sur l'ensemble de votre site pour vous. Et nous l'avons là. Nous utilisons maintenant un champ de flux de queue wag pour sélectionner les données du modèle jangle. C' est plutôt cool. 27. StreamField: Jetons un coup d'oeil aux champs de flux basés sur la table. Maintenant. Si vous venez d'une sorte de rôle de développeur frontal, vous allez penser, pourquoi utiliserons-nous des tables ? Les tables sont obsolètes. Les tables sont la pire chose jamais inventée. y a littéralement rien de pire qu'une table quand il s'agit d'Internet. Et alors que la plupart du temps je serais d'accord avec vous, il y a des cas où vous devez utiliser la table. Parfois, tu veux juste une table. Je ne sais pas. Il y a des raisons pour eux. Et ah, nous allons couvrir ça dans ce cours. Donc, d'abord, nous devons les activer, et en fait je vais juste faire référence aux docks parce que je ne fais pas celui-ci trop souvent. Donc, je ne me souviens pas du haut de ma tête, ce qui est aussi génial parce que ça arrive à vous montrer que même les gens de l'équipe principale référencent les quais. Donc, je l'ai déjà fait. Ah, voici la serrure de table et va créer quelque chose comme ça. On va y entrer dans un peu. Ah, la plus grande chose que nous avons à faire, cependant, cependant, est de prendre l'attente jusqu'à ce que la table de contrat souligne l'application bloc et l'activer. Alors ouvrons notre base par base à partir de tarte et jetons ça là-dedans. Et j'ai juste mis ça avec les autres contrats. Et puis nous pouvons fermer cela maintenant pour garder cette apparence quelque peu présentable afin que le code ne ressemble pas seulement à un désordre géant. Je vais en quelque sorte ajouter un bloc de table d'une manière rond-point. Mais le raccourci que nous avons pris dans la dernière vidéo, vous pouvez absolument utiliser aussi bien. Et si vous ne vous souvenez pas de ce que le raccourci était, certainement regardé la vidéo sur le bloc de témoignage de l'extrait parce que nous avons ajouté un extrait sans rien faire dans notre bloc. Arrêtez, je Donc ce que je vais faire ici, c'est que je dois faire une importation. En fait, le 1er 1 ici d'attendre jusqu'à la table de contrat, bloc de points blocs de table d'importation bloc. Ok, c'est jeter ça en haut de notre page et remonter jusqu'au bas. Je vais prendre un cours. Comment voulons-nous appeler ça ? Un bloc de tarification, peut-être un bloc de table de tarification, je suppose. Disons qu'il y a un bloc de table ici doctorant de je ne sais pas, bloc de table de prix. Je ne sais pas si vous allez utiliser un bloc de table de tarification ou non. Mais, hé, tu sais quoi ? Ajoutons un de toute façon. C' est à un méta modèle de classe est égal à. Donc, nous savons quel modèle pour vous est de tarifier le bloc de table html point Et je vais en fait désactiver cela juste pour le moment. L' étiquette va être une table de prix, je suppose, parce que c'est ce qu'on appelle ça. Icahn va être une table de table et le texte d'aide sera. Vous étiez les tables de tarification devraient toujours avoir quatre colonnes ou d'autres conseils comme ça. Donc non, on peut attraper ça. Allez à nos modèles maison que tarte en saisissant cette cause vous ne pouvez pas voir ça. Je pointe avec mes yeux, mais le bloc de la table de tarification et nous allons l'ajouter à notre tableau de tarification de la page d'accueil . Bien sûr, et nous allons ajouter bloc bloc bloc de la table de tarification et c'est ce Terminal Checker. n'y a pas de plaintes. C' est une bonne nouvelle, et c'est la page d'accueil de l'éditeur Maintenant, nous ne voulons probablement pas bloquer les prix sur notre tableau de tarification de la page d'accueil , mais si nous le voulions, nous pourrions le mettre là. Nous pourrions aussi le mettre sur n'importe quelle autre page, ce que nous allons faire dans une vidéo plus tard. Donc, je viens de sélectionner notre table, et par défaut nous sommes encore l'en-tête Roa est l'en-tête de colonne. Donc, genre, genre, devraient-elles être audacieuses ? Et devraient-elles être audacieuses ? Et la légende de la table est principalement destinée aux lecteurs d'écran. Il aide les lecteurs d'écran à être accessibles afin que les personnes qui ont du mal à voir ce qui se trouve sur votre site Web comprennent ce qu'il s'agit de la table. Cela donne juste un peu plus de contexte à ces appareils. C' est vraiment utile. Donc, disons le tableau des prix des paquets de fusée. C' est comme ça qu'on va appeler ça. Et je veux que la première ligne soit un en-tête. Donc, il devrait. Espérons que les gens, les gens, si ce n'est pas le cas, le rendront audacieux. Et nous allons avoir ah paquet standard standard, paquet standard et un paquet premium. Nous avons un paquet standard de nettoyage de fusée va avoir une case à cocher. Allons de l'avant et ajoutons une case à cocher. Ce gars juste là et vient aussi avec prime. Mais quoi d'autre ? éclat de fusée de nettoyage est un forfait premium uniquement. Oh, non, je suis sorti. OK, faites un clic droit Insérer une ligne sous le ravitaillement de fusée Si vous obtenez bien notre forfait premium, même alimenter votre fusée pour vous. Ah, répondez. Une rangée de plus en dessous de la peinture de fusée. Nous repeindrons votre fusée au cas où elle perdrait de la peinture quand elle entrait dans l'atmosphère . C' est assez bon pour l'instant. Allons de l'avant et publions ce clic vue La vie va tout le chemin vers le bas et nous pouvons voir que c'est une table des sortes. Et bien sûr, dans le code source, c'est, en fait, une table. Maintenant, ce que nous devons faire est que nous devons revenir en arrière, activer notre modèle. Maintenant, le problème avec ceci est que nous ne savons pas d'où obtenir ce code source. Alors, qu'est-ce qu'on va peut-être mettre dans ce modèle ? Eh bien, nous n'avons vraiment qu'une seule façon de le faire. Nous devons obtenir ce code à partir du code source. Donc, je vais faire un clic droit sur mon blocage de table, aller à la définition. Et je vais juste m'habiller ici pour où est le gabarit ? Il doit être ici quelque part. C' est là. Tout en bas. Il est déjà en train de définir un bloc de table de modèle, bloque le point de table html. Maintenant, je peux ouvrir ça ici. Je ne peux pas ouvrir ça ici parce que je n'ai pas un petit saut rapide comme ça. Donc, voici ce que je vais faire dio obtenir hub dot com slash façon dire slash wag queue et je vais chercher des blocs de table table point html. Donc, il va juste ici tabo point html Lors de la recherche de ce dépôt et cela semble correct, Attendez jusqu'au bloc de table Con Trib. Nous avons importé ces modèles. Bloc de table, blocs point de table HTM propre. C' est là. Et voici le code source que nous pouvons utiliser. Donc, ce que je vais faire est de copier tout ce truc dans mon nouveau modèle. Nous pouvons fermer celui-ci dans mes nouveaux modèles appelés Pricing Table Block. Je n'ai pas encore créé cela, alors allons de l'avant et créons cela dans le dossier Streams. Faisons l'éloge du bloc de table html point et jetons cela là-dedans. On pourrait même avoir un faux petit titre. Juste nous savons que c'est la page de mise à jour personnalisée. Bien sûr, c'est coutume. Maintenant, à ce stade dans le temps, vous pouvez passer par cela et vous pouvez dire que la tête de table devrait en fait, je ne sais pas un minimum avec 300 pixels ou quelque chose comme ça. Vous pouvez également donner la classe de table. Ce sont les éléments de table, une classe de table, réactif. Il suffit de jouer des choses de bloc comme ça et vous pouvez personnaliser ceci pour être exactement ce que vous avez besoin qu'il soit. Maintenant, je vais juste copier ce que j'ai déjà fait pour celui-là. n'y a pas vraiment beaucoup de personnalisation là-dedans. Pour être totalement honnête, je viens de rendre ce look un peu plus agréable avec les classes bootstrap afin que vous puissiez voir que Ah, mes codes un peu différents. En fait, j'ai fait au minimum avec 300 pixels pour la première colonne et pour chaque appel pour chaque autre colonne, il y a une largeur minimale de 170 pixels. Maintenant, continuons et actualisons cette page et voyons ce que nous obtenons. On peut voir en bas ici. Ah, j'ai fait une chose intéressante ici où je veux vraiment des prix au bas, mais ce n'est peut-être pas ce que vous voulez. Alors je vais chercher ça. Et il se trouve que je sais que j'ai ajouté ceci ici est Footer. Je ne veux pas ça. Débarrassez-vous de ça. C' est juste essayer de rendre cette colonne dans cette colonne en gras tout en bas. On ne veut pas ça. Ça a l'air mieux. Et maintenant, nous pouvons réellement passer en mode responsive ici. Où est-ce que j'ai là ? Il est en mode réactif dû à faire pour ce faire. Une carte. On a une table qui traverse tout le chemin. Alors regardez cette table réactive. Maintenant, la prochaine chose à noter est que nous pouvons ajouter des paramètres personnalisés. Nous avons donc une configuration par défaut, mais nous pouvons ajouter des choses supplémentaires. On peut changer la valeur par défaut ici si on voulait Teoh. Donc un minimum de rechange. Rose, combien de rangées vous commencez ? Combien de colonnes commencez-vous ? Avec des choses comme ça. Je ne vais pas forcément appliquer quelque chose de coutume, mais je vais vous montrer comment faire ça. Je vais prendre tout ça sur les quais. Et où suis-je ? Dans la page d'accueil. Je vais vouloir passer la table. Les options sont égales aux nouvelles options de table maintenant. Les nouvelles options de table n'existent pas encore. Nous allons faire en sorte que cette variable existe dans un instant. Quelque chose à faire défiler ici, créer un nouveau appelé Nouvelles options de table est égal à, et c'est vraiment juste un dictionnaire. Le minimum de Spare Rosa zéro. Je ne sais pas. À partir de Rose va être quatre colonnes de départ qui vont avant, donc, au lieu d'un trois par trois, aura ah, quatre par quatre en-têtes de colonnes. Oui, nous avons des en-têtes de colonne, des en-têtes de ligne. En fait, c'est aussi. En-têtes de colonne. False, mais En-têtes de ligne, menu contextuel vrai. On peut changer un tas de choses ici aussi. Texte de l'éditeur. C' est celui qu'on veut. J' aurai peur du langage. La hauteur, les moteurs de rendu. Il y a toutes sortes de trucs ici. Nous serions en fait dans cette vidéo ensemble pendant un certain temps si nous examinions toutes les différentes options. Mais certainement vérifier les quais et aussi vérifier le je pense qu'il s'appelle Hansen Table . Oui, Hansen Table 6.2. Ici, il y a différents paramètres que vous pouvez consulter dans la documentation aussi, mais continuons et voyons à quoi ressemblent mes nouveaux paramètres, donc nous ne allons pas voir ici parce que ce tableau est déjà défini. Mais allons de l'avant et ajoutons un nouveau tableau de prix. Regarde ça. Nous avons une grille quatre par quatre à l'intérieur d'une grille trois par trois. Donc, il y a des capacités de personnalisation là-bas ce week-end. Affaiblir Dio. Ce qui est vraiment sympa, c'est que si tu as un client, celui qui veut juste, genre, montrer des trucs dans une table. Mais c'est déjà dans une feuille de calcul que vous pouvez simplement copier. Comme sur Google Sheets, je crois. Ça marche plutôt bien. Vous pouvez juste copier toutes les cellules et littéralement simplement les coller là-dedans. Et ils fonctionnent vraiment bien. Mais je vais supprimer celui-là, et je vais enregistrer la page et nous en aurons fini avec des tables personnalisées. est ainsi que nous faisons des tables et sorte de travailler avec la modification des options de table par défaut. 28. RichText StreamField: Ajoutons maintenant notre premier champ de flux à notre page flexible. Après tout, nous avons ajouté tous ces champs de flux à sa page d'accueil, et nous le rendons très flexible, ce qui est agréable. Mais ce n'est pas vraiment le but de la page d'accueil des pages Flex d'être super flexible. Alors allons-y, fermons notre code ici et allons dans les modèles flexibles dot pie et nous pouvons voir oui, il n'y a rien ici, pas un seul champ personnalisé. Maintenant, si je partage mon écran ici et ici, je vais à la maison modèles dot pie, on peut voir oh, chercher des trucs. Débarrassons-nous de ça. Et nous voulons essentiellement de notre page d'accueil, toute cette section du corps pour que nous puissions littéralement copier ça. Ou si vous voulez la pratique, vous pouvez l'écrire à la main. C' est totalement cool. C' est probablement une meilleure façon de le faire. Et donc maintenant, nous sommes Flex Page a ce corps est égal à flux en champ, avoir des cartes de titre, l'image et le texte appelé l'action, un extrait de témoignage, bloc de sélecteur et un tableau de prix. Maintenant, c'est génial, mais le corps ne va pas apparaître du tout. On a besoin des panneaux. Les panneaux sont importants. Ces panneaux de contenu nous permettent en fait d'exposer le champ du corps. Parce que, encore une fois, Wag Tail et Django, ils ne font aucune hypothèse sur le type de données que nous voulons réellement avoir accessibles à notre client ou deux. Les personnes d'entrée de contenu. Donc, nous allons faire des panneaux de contenu est égal à des panneaux de contenu. De plus, et puis nous voulons ajouter un panneau de champ de flux et à son corps. Maintenant, si nous devons sauvegarder cette page et nous, oui, bien sûr, nous vérifions notre terminal. Ça va dire que Stream Field n'est pas défini. Fondamentalement, ce fichier dit, Qu'est-ce qu'un champ de flux ? Donc, nous allons ici et nous faisons à partir des champs dot core rightto dot import un champ de flux, et c'est aussi le fait de Quito dot admin dot edit handlers import un panneau de champ de flux. Allons de l'avant et sauvegardons ça. Blocs n'est pas défini. Eh bien, ça a du sens. Nous avons toutes sortes de blocs ici. Nous utilisons notre propre coutume. Les blocs utilisaient également un bloc de sélecteur d'extraits, nous devons donc les importer aussi. C' est importer notre bloc, donc c'est faire à partir des flux, blocs d'importation et Importons également le panneau de sélection stupide à partir de la voie queue extraits de points points points blocs d'importation extrait d'importation, bloc de sélecteur. Qu' est-ce qu'on manque d'autre ? nouvelles options de table n'sont pas définies car les nouvelles options de table se trouvent sur la page d'accueil. Nous pourrions importer cela aussi si nous le voulions. Nous pourrions faire à partir de la maison points Mottoes importer de nouvelles options de table. Et on y va. Maintenant, si nous entrons réellement, édite une de ces pages. Assez sûr. Oui, on a vu cet air. On va le revoir, comme prévu. Wait Till recherche maintenant notre champ de corps, tous ces champs de flux et n'existe pas. Maintenant, je vais annuler mon serveur, et je vais faire des migrations. Mais je vais l'exécuter sur une application particulière. Donc je vais faire Python géré. Je fais des migrations. Et c'est l'application flexible sur laquelle je travaille. Hadfield corsé page Flex qui a l'air bien. Python a géré un serveur d'exécution de migration à nouveau et lorsque nous actualisons, cela disparaîtra. Euh, non. Nous avons des cartes standard de titre, image et taxe appelé tableau de prix d'action. Et tout cela allait fonctionner exactement de la même façon que nous avons mis en place sur la page d'accueil. Donc, en quelques minutes, nous sommes en mesure de personnaliser complètement notre page flex, et cela fonctionnera juste. Nous avons fait le travail une fois sur nos modèles slash maison un que notre page d'accueil ici nous avons fait le travail une fois. Pourquoi voudrait-on le faire encore et encore ? Et c'est exactement ce que nous faisons ici, c'est que nous avons tendance à travailler une fois que nous allons juste tirer parti de ce travail à nouveau. Maintenant c'est cool, mais nous voulons ajouter du texte enrichi. Alors allons de l'avant et ajoutons du texte enrichi personnalisé ici. On pourrait se débarrasser de ça, et je vais faire un plus gros. À ce stade, le texte enrichi peut être importé de deux façons différentes et je vais vous montrer les deux façons. La première façon est un moyen très, très simple. Si vous utilisez juste du texte enrichi et que vous n'avez pas besoin comme, un champ de titre spécial ou comme des options d'alignement de texte ou quelque chose de personnalisé et que vous voulez juste vraiment un éditeur de perruque whiz e, cette première façon est certainement la voie à suivre. Donc, nous allons faire à partir de blocs d'importation de noyau de point de queue wag, Mais nous avons aussi bloc, donc vous voulez renommer l'un de ces blocs. Peu importe celui que nous renommons, tant que nous le renommons de manière cohérente. Donc, comme si nous avons renommé nos blocs, nous devons renommer celui-ci et celui-là et celui-là ou un moyen plus facile parce qu' il y a moins de ces affaiblis renommer le liant. Donc Wag Queue Blocs est ce que je vais appeler ça. Donc, importer des blocs aussi. Dites aux blocs qu'on peut aussi mettre ça sur des lignes séparées pour rendre ça, tu sais, un peu plus agréable. Regardez Allons de l'avant et ajoutez la taxe Rich. Juste un champ de texte enrichi standard. On va faire un nouveau champ de ruisseau. C' est la première valeur va être du texte enrichi à nouveau. Ce n'est pas forcément du texte enrichi. C' est ce que je vais appeler ça. Et maintenant, je vais donner un bloc de texte riche. Sauvegarder cela et nous allons de l'avant et rafraîchir cette page et nous allons voir que je vais maintenant avoir une option pour un complet avec la perruque. Regarde ça. Il est livré en italique gras. H deux h trois h quatre liste ordonnée a Nord A liste des règles horizontales. Vous pouvez même incorporer des vidéos que vous pouvez lier à peu près tout un lien interne, lien externe, lien e-mail, lien téléphonique ou une ancre. Le lien d'ancrage long est nouveau pour les documents 2.7, et vous pouvez même ajouter une image ici. Si vous le vouliez, je dirais que celui-ci sera aligné à gauche. Maintenant, maintenant, c'est vraiment, vraiment cool parce que je peux dire que c'est un H 3 transformé cela en une règle horizontale H 3 mis ici et je peux dire ceci, mais aucun de ses champs de flux ne va se présenter. Et encore une fois, c'est que j'ai oublié celui-là. fait un peu de temps qu'on n'a pas travaillé là-dessus. Donc, il ouvre notre page d'accueil et rappelle-toi de cette chose. Oui, on a juste besoin de cet eso, je vais littéralement copier ça. Ouvrez ma page flex, venez ici et collez-la. Et donc tout ce que nous disons est dans le basé sur tht mail, il y a un bloc appelé contenu. Peu importe ce qu'il y a là-dedans, nous allons le remplacer. Injectons nos champs de flux dans cela maintenant. Cela va fonctionner, pas de la façon dont vous vous attendiez car le bloc include n'existe pas. Nous avons donc besoin de charger les étiquettes de noyau de queue de wag. Laissez-nous rafraîchir notre page. Le contenu des blocs apparaît plus d'une fois. Oui, parce que ce n'est pas une bannière. Pour une raison quelconque, je croyais que c'était une bannière. Débarrassons-nous de ça. Débarrassons-nous de ça. Nous ne pouvons avoir qu'un seul contenu de bloc par page. Comment sont Regardez-moi ça. On a un riche Texan ici. Cela apparaîtra comme et h trois. Bien sûr, il est là. Il s'agit d'un paragraphe régulier. Bien sûr, il est là. Mais que se passe-t-il si nous voulions mettre cela dans son propre modèle ? Parce que maintenant, ça ne correspond pas vraiment au reste de ce que nous construisons. Alors allons-y. Et disons que d'utiliser son propre modèle de modèle est égal aux flux. Et appelons cela un bloc de texte simple et riche. Et cela va être appelé simple parce que finalement, nous allons réellement limiter les fonctionnalités que vous pouvez ajouter ici. Donc nous allons nous débarrasser des titres parce qu'il y a déjà un titre. Nous allons faire un tas d'autres choses maintenant que le modèle n'existe pas. Faisons en sorte qu'il existe si simple. Rich texte bloc point html et qui va aller dans ces flux dossier. Et donc je viens d'écrire du HTML ici. Et quand nous examinons cette page riche détecteurs, le texte riche va aller ici. Mais qu' qu' est-ce qu'on met ici ? Eh bien, allons-y et mets-toi soi-même. Bien sûr, on pourrait le faire. On l'a déjà fait avant maintenant, c'est plutôt génial. Allons de l'avant et éditons ceci une fois de plus et mettons un lien là juste pour vraiment conduire cette maison. Prenons un lien et relions Teoh. Je n'ai pas vraiment d'importance à propos de nous page. C' est juste un échantillon de contenu et nous voulons juste que ce lien apparaisse. Et bien sûr, notre lien apparaît comme prévu. Maintenant, et si parce que pendant que j'édite ça, et si je ne veux pas d'images ici ? Et si je ne veux pas que les gens établissent des liens vers des documents et que je ne veux pas de h 23 ou 4 ? Eh bien, avec un bloc de texte riche, nous avons ce petit argument de mots-clés cool appelé fonctionnalités, et nous pouvons dire quelles fonctionnalités nous voulons. Donc nous avons de l'italique gras, donc nous allons taper gras métallique Oh, et j'ai juste pensé à une bonne blague que je mets totalement ici. Ma police préférée en tant qu'acteur. victoire audacieuse en italique. Ha ! D' accord. Ah, on ne veut pas h 23 ou 4, mais on veut les deux listes. Alors allons de l'avant et mettons la liste ici. Même la liste ordonnée. Même une liste nordique. Je ne veux pas de la règle horizontale. Débarrassez-vous de ça. Je ne veux rien d'autre que des liens. Alors allons de l'avant et mettre Link et rafraîchissons votre page et voyons ces options changer ici. Et regarderais-tu cette liste ordonnée en italique sur la liste ordonnée et un lien ? En plus, vous savez, la pause qui vient toujours avec une semaine chargée ne peut pas vraiment s'en débarrasser. Annuler et rétablir. Et si c'est un moment dans le temps, vous pensez, Hey, Caleb, je veux dire, c'est cool que vous puissiez limiter les fonctionnalités, mais d'où les avez-vous tirées ? Comment savez-vous mettre gras ou italique ou oh al ou vous l ou Link ou quelque chose comme ça là-dedans  ? Les quais. C' est mon C'est ma réponse totalement pas génial. J' étais juste les quais. Eso si vous allez dans les quais et que vous regardez juste à personnaliser le Où sommes-nous ? Écouter des sujets avancés Personnalisation Wag Tail Personnalisation de l'interface d'édition. Vous pouvez effectivement voir que les identificateurs de fonction fournis sur une isolation waittil par défaut sont les suivants. H 12345 et six Donc vous pouvez réellement activer H un, 45 et six. italique gras. Oh bien ul règle horizontale lien une image de lien de document et incorporer. Il y a aussi quelques identifiants supplémentaires. Ils ne sont pas activés par défaut, mais vous pouvez les activer dans votre liste afin que nous puissions également y mettre une frappe de sous-script en exposant de code et une citation de bloc. Donc c'est l'option numéro un. L' option numéro deux est si vous avez besoin orteil utiliser du texte enrichi dans un champ de flux régulier avec une autre option. Allons de l'avant et ajoutons cela pour que nous puissions en créer un nouveau ici. Tellement riche texte avec je ne connais pas ce titre sur ce sujet. Donnez-nous un lien. Deux blocs font du texte enrichi avec le bloc de titre, et cela n'existe pas actuellement. Mais si nous ouvrons des blocs de points de flux, nous pouvons l'ajouter dans la classe ici, quel que soit ce qui a été appelé ce nom très long et bloque le bloc de points frappé, et nous pouvons ajouter un titre simple comme nous l'avons fait auparavant. Titre est Eagle deux blocs Tut HR bloc longueur maximale de 50 ou quelque chose comme ça. Et puis nous pourrions faire le texte ou le Ce n'est pas appelé texte. Ce qu'on appelle le contenu est égal. Faire des blocs parsèment un bloc de texte riche bloc de texte, puis nous pourrions lui donner des fonctionnalités aussi bien. Alors allons donner à notre page un peu de rafraîchissement rapide ici qui va se débarrasser de celle-ci pour nous parce qu'elle n'est plus disponible. Nous avons un texte riche avec titre. Donnez-lui un titre. Nous avons Rich Texan ici. Nous pouvons limiter ces caractéristiques aussi bien est égal à Si nous ne voulons pas de fonctionnalités, donnons-lui juste une liste vide. Enfin, donnons-lui un petit modèle rapide. Votre modèle est égal à barre oblique des flux Je vais réutiliser le simple bloc de texte riche html point , et je vais sentir cela avec un titre. N' importe quoi ici parce que j'ai besoin d'un titre mains à travers un ipsum chaud là-dedans et je dois enregistrer un brouillon. Donc, je peux obtenir une version plus fraîche de cette page. Nous pouvons voir maintenant que tout cela a été désactivé. C' est littéralement juste des paragraphes à ce stade. Paragraphe, paragraphe, paragraphe, paragraphe, paragraphe publier et actualisons la page. Donc maintenant, nous allons voir quelque chose que nous n'avons pas encore rencontré. Nous considérons l'auto comme une valeur frappée avec toutes ces autres choses dedans. Maintenant, la raison pour laquelle cela apparaît est parce que dans notre modèle, nous disons simplement que self disait Retourner le champ de flux entier lui-même alors que peut-être nous voulons un titre. Donc auto titre point et nous voulons le contenu, doute de soi, contenu et je ne l'ai pas appelé contenu. Je l'ai appelé contexte parce que c'était une faute de frappe. Mais je vais l'appeler contexte ici juste, tu sais, allez-y. Nous avons donc maintenant un contexte là-dedans. Maintenant, si à un moment quelconque, vous voyez votre page montrant du HTML ou des choses qui ressemblent au HTML, vous deviez utiliser le filtre de texte enrichi dessus, sorte que vous chargez wayto tags core et vous simplement dio pipe texte riche. Maintenant, cela est déjà échappé et semble totalement bien ou non échappé plutôt. Mais parfois, lorsque vous le faites de cette façon, vous pouvez réellement voir, comme, un lien ici le lien HTML réel ou quelque chose qui semble très similaire à lui. Et vous voulez que ce soit HTML. Donc, vous réglez pour utiliser le filtre de texte enrichi, et cela va résoudre votre problème. Non, je ne vais pas garder tout ça dans le code source. Je vais annuler ça. Fermez-le, et je vais m'en débarrasser. Et je vais me débarrasser de celui-ci parce que je vais m'en tenir à la façon originale que nous avons faite. Et c'est deux façons différentes sur la façon dont nous pouvons ajouter un bloc de texte enrichi à nos champs de flux de pages flexibles . 29. StreamField: comme notre dernière leçon. Nous allons créer un tout nouveau champ de flux directement à partir d'un composant de queue de wag sans écrire notre propre bloc frappé. Ce que je veux dire par là, c'est que si nous ouvrons des modèles flexibles DuPuy des dernières leçons pour environ les deux dernières leçons, nous avons utilisé un bloc de sélection d'extraits directement d'attente jusqu'à sans utiliser notre arrêt de bloc de barre oblique de flux , Je dépose dans la dernière leçon, nous avons ajouté notre propre texte riche. Nous lui avons donné un modèle et limité les fonctionnalités et nous n'avons pas du tout utilisé le bloc stop I fichier . On l' a fait une fois et j'ai défait tout ce travail parce qu'on ne voulait pas garder ça dans cette vidéo. Dans cette leçon sur notre page flex, je suis sur notre page flex ici. Nous allons ajouter un simple sélecteur d'image, et cela va être une image plus grande. Alors appelons cette grande image et nous allons simplement dire à partir de blocs de queue de wag. Et si vous êtes juste tuning et maintenant attendre que les blocs viennent de blocs d'importation de décor Elle remaillis et puis je l'ai renommé pour attendre dire blocs Attendre, Tell blocks, sélecteur d' image, bloc et ici je vais donner à cela un un petit peu de textes d'aide, tout comme nous le ferions normalement dans un domaine de flux régulier. Je vais dire que cette image sera corrompue à quelque part autour de 1200 par 7 75 Et nous allons également spécifier un modèle spécifique. Notre modèle. Donc, mettons cela dans les flux grand bloc d'image html point. Maintenant, quand je retourne à notre page sur les États-Unis, j'ai cassé quelque chose n'a pas d'attributs, image, chaussures ou bloc. Et c'est parce que j'allais honnêtement un peu trop vite. Ce n'est pas des blocs de queue de wag. Qu' est-ce que je pensais avec celui-là ? Les images sont sa propre bête dans Wag Tail. Il ne vient pas de blocs d'attente Il vient de wag tail dot images di blocks import image sélecteur bloc à peu près la même chose que le bloc sélecteur d'extrait fait. Mais celui-ci est un bloc de sélecteur d'images. Alors allons-y. Enregistrer que notre terminal est maintenant très heureux de ce que j'ai écrit Refresh Pidge et j' ai un grand bloc d'image ici afin que je puisse ajouter n'importe quelle image ici. Je vais juste ajouter celui publié et assez sûr, Lorsque je prévisualise cette page, nous obtenons un modèle. N' existe pas. Erreur. Je ne vais même pas regarder. Je sais que ça va arriver. Je vais créer un nouveau fichier dans les flux. Modèles. Sous-répertoire. Donc des modèles Rocketman, des flux. Nouveau fichier ici appelé Grande image bloquée. Html. Maintenant, je peux faire mon propre rendu personnalisé ici. Je n'ai pas à laisser la queue de wag contrôler tout. Je peux faire ce que je veux à ce stade, mais la première chose que je veux faire est de charger les balises d'images de queue wag parce que je veux pouvoir utiliser la balise de modèle d'image. Et l'image elle-même est cet objet entier. Tout ce qui est passé dans le contexte de ce modèle est le champ de flux lui-même. Donc auparavant, nous avons fait l'image de point auto dans un bloc frappé, mais cette fois il n'y a pas de bloc frappé. C' est juste une image que nous allons faire. Image Phil 1200 par 775 à son image. Et puis je peux simplement dire que je suis Gee, que tu es Ah, je suis un point et oui, là. C' est là ? Oui, les gens se sentaient mal attendre jusqu'à ce que l'image soit plurielle. On y va. Et regarde ça. C' est Ah, assez grande image, n'est-ce pas ? Maintenant, cela ne correspond pas tout à fait au reste de notre site. On dirait que quelque chose est un peu là-bas, donc je vais ajouter un peu de template ici. Et puis Caleb recommence à avancer rapidement. D' accord ? Donc je viens d'ajouter cela là-dedans et faire à faire, à faire. On y va. Ça a l'air un peu mieux. On dirait que les choses sont en train de s'aligner, non ? Oh, ouais, c'est mieux. Maintenant, faisons en sorte que cette page ressemble à une chose comme un réel payé, Vous savez, nous allons avoir un texte. Donc, nous avons des textes riches ici. Allons de l'avant et ajoutons un peu plus bas, um, classique ou um au-dessus de Lauren classique ci-dessous, et qui est juste un peu squishy avec l'image. Allons de l'avant et ajoutons de la marge sur l'accès Y. On y va. Ça a l'air plutôt bien. Donc, vous savez, page de base sur nous, et c'est ainsi que nous utilisons un grand champ de flux d'images directement. Maintenant, si vous venez de cette vidéo précédente et que vous vous demandez comment nous le faisons d'une autre façon. Eh bien, nous avons déjà plusieurs exemples de cela. Dans nos blocs, je sélecteur d'image est quelque part ici. Image dans le texte, bloc images égal à bloc de sélecteur d'image afin que nous puissions simplement regarder l'image et le bloc de texte modèle html point comme une référence pour la façon de le faire de cette façon. Sinon, nous pouvons simplement utiliser les chaussures d'image ou bloquer directement, et nous n'avons pas à nous soucier du sous-coût d'un bloc frappé pour obtenir un bloc de sélecteur d'image . On peut juste l'utiliser directement, ce qui est vraiment, vraiment sympa. Vous pouvez aussi faire la même chose avec ce que nous avons déjà vu. Sorte de blocs dot hr bloc. Vous pouvez le faire avec des blocs de texte point ou bloc bloc de sélection de page de trucs, et je voudrais en fait vous encourager à essayer cela, créer un champ de flux et je ne sais pas, appelez-le page personnalisée. Peut-être ne l'appelez pas la page elle-même. C' est un mot qui est déjà utilisé dans le contexte du modèle. Vous pourriez rencontrer un problème avec cela, mais la page personnalisée ne serait pas un problème, et alors vous pourriez utiliser des blocs que je suppose serait Weg toe block, stunt page, block chooser. Et vous pourriez ensuite travailler votre chemin à partir de là. Alors peut être aller de l'avant, donner un coup de feu, voir comment ça se passe. Et cela vous donnera une idée assez bonne de la façon dont vous pouvez contourner en utilisant un bloc frappé complètement si vous gardez vos champs de flux agréable et simple. 30. Validation du flux en ligne: ajoutons la validation de champ de flux personnalisé quand il s'agit de notre bloc de liens, et je vais en fait simplement tirer cela quand il s'agit de notre bloc de liens que nous avons ici. Nous avons une page interne et un lien externe, et nous avons ajouté une valeur frappée ici. La valeur frappée pour comprendre lequel est censé venir en premier et nous donner la propriété UL à l'intérieur de notre modèle. Donc, fondamentalement, nous avons appliqué une logique supplémentaire à notre bloc de liens. Mais comme ces deux champs ne sont pas obligatoires, ils peuvent tous les deux être vides et ils peuvent tous les deux être sélectionnés. Et donc, pour vos personnes d'entrée de contenu. Lorsqu' on leur donne deux options, ils peuvent sélectionner une page waittil interne avec un bloc de sélecteur de page. Ou ils peuvent entrer un lien externe, qui est vraiment n'importe quel lien vers n'importe où ailleurs sur Internet. Ils ne savent pas vraiment lequel va venir en premier tout le temps. Vous pouvez leur donner du texte d'aide sur ces deux champs, et oui, c'est très utile. Mais c'est encore plus utile si vous Congar je les ai par programme. Ce que je veux dire par là, c'est que si nous ajoutons notre page d'accueil, il devrait y avoir un lien ici quelque part. Bien sûr, c'est notre 1er 1 Nous avons un Lincoln ici avec le texte de lien Nettoyez votre fusée maintenant page interne . Et il n'y a pas de lien externe. Mais je peux si je voulais fournir un lien externe. Attendez que Dot Io et ça me permet de sauver ça totalement bien. n'y a pas de problème avec ça maintenant. C' est en soi le problème est qu'il n'y a pas d'erreurs parce que quand je reviens et en fait prévisualiser la page, nettoyer votre fusée Maintenant, vous pouvez voir en bas à gauche qui est encore m'amène à la page des services de nettoyage. Cependant, j'ai également ajouté le chemin jusqu'à ce lien dot io dedans. Et quand vous travaillez avec vos clients, vous voulez faire de l'entrée de contenu la chose la plus facile pour eux cause honnêtement, maintenir un site Web ah avec un bon contenu peut être assez difficile et donc une bonne façon de contourner cela est simplement de résoudre ce problème en leur donnant une certaine forme d'erreurs et nous allons donc leur donner la validation. Maintenant, la première chose que nous voulons faire et je vais essayer de le faire un peu, tout dans une vue ici, donc je vais faire à partir de django dot core exceptions import l'air de validation et je vais aussi le faire à partir de django dot core Non, pas DOC ou qui était l'habitude des formes point point vous tills importer liste jamais. Et chaque fois que ce lien est enregistré, nous pouvons exécuter une méthode particulière ici appelée Clean. Donc nous pouvons dire que Death Clean va prendre elle-même et une valeur. Et disons qu'il n'y a actuellement aucune erreur. Ce sera un dictionnaire d'erreurs, mais il n'y en a actuellement aucun. Et puis nous pouvons dire quelque chose comme si vous savez, quoi que ce soit échoue, nous ne savons pas ce que c'est. On changera ça dans un instant. Nous pouvons voir les erreurs est égal à quel que soit le nom du champ est égal à la liste d'erreurs, puis votre texte d'erreur ici. Et puis nous pouvons dire s'il y a, en fait, des erreurs dans le dictionnaire. Donc, s'il y a des éléments dans votre dictionnaire, nous pouvons déclencher une validation d'erreur de validation jamais dans votre lien et passons quelques paramètres. Le Param zehr va être les erreurs. Sinon, s'il n'y a pas d'autres héritiers, cela ne va pas s'exécuter et affaiblir simplement exécuter super cette valeur propre maintenant pour passer rapidement ce juste comme un résumé rapide chaque fois que cela est enregistré, chaque fois qu'un lien obtient enregistré et cela pourrait se produire plusieurs fois. Si vous avez plusieurs flux, champs utilisant plusieurs liens, cette fonction propre va s'exécuter. Et puis nous disons pour ce nettoyage particulier, une erreur de signe pour être un dictionnaire vide. Et puis si notre validation passe ou échoue, selon ce que nous essayons de vérifier, nous pouvons dire des erreurs. Quel que soit le nom de ce champ fait désormais partie d'une liste d'erreurs. On a importé la liste aérienne et la validation ici. Ensuite, nous disons, Hey, s'il y a des erreurs parce que nous pouvons faire plusieurs déclarations if ici, s'il y a des erreurs, erreur de validation va être levée ou va être soulevée, alors nous allons dire s'il y a des erreurs, soulevez un air de validation avec une sorte de texte là-dedans, et les paramètres seraient quel que soit le dictionnaire d'erreurs. Sinon, s'il n'y a pas d'héritiers, continuez à faire votre truc habituel. C' est ce que ça veut dire. Continuez à vous embêter, alors allons-y et donnons un exemple rapide ? Nous pouvons dire si vrai, le nom du champ va être, disons, lien externe et le texte d'erreur ou la liste jamais ne sera pas vraiment une erreur, mais il apparaît de toute façon. Allons de l'avant et sauvegardons ça. Et il n'y a pas de nom de module jango cette forme et c'est vraiment correct. C' est des formes de dot django pluriel. Ça a l'air mieux. Ok, donc on est sur notre page. Nous avons un lien externe et un interne Inc. Nous savons que quoi qu'il arrive, cela va fonctionner. Et nous disons, si c'est vrai , , c'est toujours vrai. Donc, cela va s'exécuter. Nous allons ensuite ajouter des erreurs externes à notre dictionnaire. C' est un sans air. Cela sera alors également vrai, et cela suscitera un air de validation. Alors allons de l'avant et sauvegardons notre projet. Et bien sûr, cette page n'a pas pu être enregistrée en raison d'erreurs de validation et vérifiez ceci. Pas un vrai air, mais ça arrive de toute façon. Mais Lincolns utilise aussi plusieurs endroits là-bas. Il l'est aussi, et il est là encore et encore une fois. C' est encore là, et je sais qu'il y a quatre erreurs de validation parce qu'il y en a quatre ici maintenant. Ce n'est en fait pas un très bon exemple, parce que vous ne voulez pas exécuter ou augmenter un air de validation chaque fois que quelqu'un enregistre une page, parce qu'il ne sera jamais en mesure d'enregistrer sa page. Donc, allons de l'avant et obtenons certaines des valeurs de ce bloc entier qui est sauvegardé afin que nous puissions dire que la page interne de la page va être une valeur. N' obtenez pas la page interne, et le lien externe sera le lien externe. Et donc, à ce stade, nous avons deux variables que nous pouvons utiliser. Nous pouvons dire si la page interne et le lien externe nous allons de l'avant et soulevons deux erreurs, une pour la page interne un pour le lien externe. Et disons que ces deux champs ne peuvent pas le remplir. Veuillez sélectionner ou saisir une seule option. Quelque chose comme ça. D' accord, je vais sauver ça et allons de l'avant, sauver un brouillon. Nous pourrions aussi facilement publier une page, et cette fois nous n'avons que deux airs de validation. C' est celui qui travaillait principalement avec, car il est près du haut de la page est plus pratique à regarder, mais nous pouvons voir que ces deux champs ne peuvent pas être remplis. Veuillez sélectionner ou entrer une seule option, et il est indiqué pour les deux. Maintenant c'est fantastique. Faisons le contraire. Faisons Elliff, pas la page interne et pas le lien externe. Nous voulons différent. Il y a et nous voulons que cette erreur dise quelque chose dans le sens de vous avez besoin juste comme au moins l' un d'entre eux. Alors s'il vous plaît sélectionner une page ou entrer un vous Earl pour l'une de ces options. C' est Checker Terminal Terminal. La vie a l'air bien et je vais m'en débarrasser, et je vais m'en débarrasser, et nous verrons une ère différente cette fois. Donc juste un vous montrer que nous pouvons le publier au lieu de simplement enregistrer un brouillon pour obtenir des erreurs de validation . Bien sûr, le voilà. La police. Sélectionnez une page ou saisissez votre AL. Pour l'une de ces options, je vais sélectionner la page à propos des États-Unis. Non, je sais qu'il y en a encore un ici, donc ça va me lancer un autre air de validation. Cependant, celui-ci passé l'environ US un totalement passé. Ce n'est pas un problème. Où cherchons-nous d'autre ? On en a un ici aussi bien dit. Il doit toujours y avoir un lien. Nous allons mettre celui-là comme brillant à faire. Où est l'autre air de validation ? C' est ça ? Non. Mais parce qu'il y en a deux là. Cliquez sur Publier. Notre page a été publiée. Regarde ça. Ils sont à la page de nos propres validations. Donc, maintenant, nous savons que ce sera toujours un lien interne ou un lien externe. En plus de cela, nous avons déjà une logique supplémentaire pour notre valeur de lien ici, disant que s'il y a une page interne, utilisez-la ou s'il y a un lien externe, utilisez-la et il n'y aura jamais qu'une des ceux-là. Il y aura l'un ou l'autre, mais jamais les deux. Et enfin, un peu de nettoyage. Ici, Allons au haut de la page. Des haricots frais. Mettez-les là-haut. La vie semble bonne, et c'est ainsi que nous ajoutons la validation de champ de flux personnalisé 31. Limitation des pages: jusqu' à maintenant, nous avons créé un certain nombre de pages différentes, et nous avons en fait un problème particulier que nous n'avons pas encore vraiment résolu. que notre site Web grandit, il peut vraiment commencer à devenir hors de contrôle. Par exemple, nous pouvons ajouter une page enfant à notre page d'accueil appelée Accueil. Maintenant, pourquoi devrions-nous les pages d'accueil sur notre site Web ? Nous avons une page dédiée juste pour la page d'accueil. Nous n'avons probablement pas besoin d'une deuxième page d'accueil. Il y a des cas où vous voulez probablement cela, mais dans ce cas, nous ne sommes pas sur notre page d'accueil. Nous avons déjà une page de liste de services, et nous sommes en mesure de créer une autre page de liste de services. Nous n'en voulons qu'un, donc c'est un problème sous notre route. Si vous cliquez sur cette petite icône là-haut, ce globe et que vous dites Ajouter une page enfant, nous pouvons maintenant dire que n'importe quel autre type de page sauf la page d'accueil car elle est déjà disponible . Mais nous pouvons dire que la page de liste de service, la page de service ou la page de divers Flex peut également être ah, type de page d' accueil. Nous ne voulons pas ça, donc nous devons limiter ça. Heureusement, Wag Tail nous donne la possibilité de le faire très facilement. Alors allons de l'avant et commençons par restreindre la route. Quelles pages enfants peuvent être acheminées maintenant ? Nous n'avons pas accès à la page racine elle-même C'est dans le paquet queue de la façon. Mais si j'ouvre les modèles de maison dot pie et que je spécifie les types de page apparents, je peux donner à cela une liste de nom AP avec le nom de modèle APP nommé modèle point, nom, nom de modèle. On y va. Third Time est un charme, et cela dira que la page d'accueil doit toujours avoir un parent de n'importe quel nom de modèle de point d'application est maintenant. Cela n'existe pas, mais wag Tail core dot Page existe. Ceci est notre page de route afin que nous puissions enregistrer ceci et revenons ici sous notre page d'accueil lorsque nous cliquons. Ajouter la page d'accueil de la page d'accueil n'est plus disponible. Onley peut-il vivre sous notre page de route ? Donc, il est toujours là mais n'est pas autorisé à vivre ailleurs. Maintenant, nous limitons la façon dont nos sites Web ont été créés, sorte que chaque site commence par une page racine. Ensuite, nous avons une page d'accueil et nous disons qu'il ne peut pas y avoir d'autre page d'accueil ou si nous allons dans notre page, nous ne pouvons pas lister une page d'accueil sous notre page à propos des États-Unis. Cette option existait auparavant. Ce n'est plus le cas, ce qui est vraiment sympa. Donc nous commençons à limiter une partie de cela. Revenons à une page racine et nous allons nous débarrasser de ces autres options. Débarrassez-vous du service Flex Page, de page de liste et de la page de service afin qu'aucun d'entre eux ne puisse vivre sous la page d'itinéraire. Maintenant. façon dont nous ferions cela est si nous ouvrons sont des modèles flexibles dot pie. Nous pouvons spécifier les types de page apparents ici afin de laisser un type de page parent est égal à, et ceci est juste une liste afin que la page flexible puisse toujours vivre sous notre page d'accueil. C' est bon. Nous avons déjà cette mise en place. C' est là que vit actuellement notre page. Mais nous voulons aussi que les pages flexibles soient Nesta vel sous d'autres pages flexibles afin que vous puissiez créer et à propos de nous, puis peut-être une page d'équipe, puis peut-être une page dédiée pour chaque personne de votre entreprise. Donc, nous allons dire que le nom de l'APP est Flex. C' est celui dans lequel nous sommes en ce moment et la page flexible. Donc, nous ne parlons vraiment que des types de page parent. Tu as le droit d'être ton propre parent. Ça a l'air un peu bizarre, et la page d'accueil est autorisée à être votre parent. Disons ça, et je vais revenir en arrière d'une page. Bien sûr, cela me permettra de créer une page flexible ici. C' est très bien. Je vais aller à la racine. Je ne suis plus autorisé à créer une page flexible. Donc c'est parfait. Et assurez-vous juste que cela fonctionne. Allons-y et vérifions notre page flex ici. Ajoutons une page enfant, et bien sûr, il est toujours autorisé à être là. Nous voulons finalement nous débarrasser des deux autres, et il y a une propriété de deuxième page que nous pouvons assigner pour se débarrasser de cela ou pour se débarrasser des deux autres. Maintenant, nous en avons deux autres sur une route qu'on ne veut pas. Nous n'avons pas la page de liste de services ou la page de service, alors allons de l'avant et ouvrons les modèles de services haut de gamme et sa page de liste de services. C' est ce que le type de page parent que cela ne peut jamais vivre en dessous. La page d'accueil du point d'accueil de la page d'accueil. C' est le nom de l'APP, et c'est le nom du modèle. Et si nous faisons défiler jusqu'à notre page de service ici, nous pourrions faire le même type de page parent. Mais cette fois, nous voulons que le type de page parent soit toujours la page de liste. Donc, les pages de service toujours, toujours, toujours, toujours, doivent toujours vivre sous notre page de liste de services ici. Donc, nous disons services point page de liste de services Et encore une fois, c'est juste l'application que nous sommes actuellement dans elle et le modèle, qui est juste celui-ci ici. Et j'ai fait un peu d'ici. Ce n'est pas le type de page parent. Il s'agit de types de page parent car il s'agit d'une liste qui peut être plus d'un. Donc si tu cries à ton écran en disant, Salut, Caleb, tu as fait une faute de frappe. J' ai certainement fait une faute de frappe là-bas, donc je vais juste retourner à la route à une page enfant, et ça dit automatiquement, Hey, Hey, je n'ai qu'un type de page qui est autorisé à vivre en route. C' est une page d'accueil, donc ça me prend automatiquement ici. D' accord, donc il y a une autre façon de faire ça. En fait, nous avons résolu tous nos problèmes avec cette seule méthode. L' autre méthode est les types de sous-page. Donc, si nous cliquons sur Ajouter une page enfant à notre page de service, revenons à notre page de liste de services ici. Et nous allons juste commenter ceci et je vais juste revenir parce que je veux voir toutes ces options différentes. Donc, je suis sur ma page d'accueil. Je vais ici, j'ai une page de liste de services qui est le type de page ici, et je peux ajouter une page enfant, et je peux ajouter une page de liste de services ou une page de service. Maintenant, nous résolvons ce problème en ajoutant le type de page parent est la page d'accueil, Mais nous avons commenté cela. Donc, maintenant, nous disons que la page de liste de services peut également vivre sous service. Écouter Pitch peut également vivre sous une page de liste de services. On ne veut pas ça du tout. L' autre méthode que nous pouvons faire ici est que nous pouvons dire que les types de sous-page sont égaux à, et nous disons quels types de page pouvons-nous définir ? Et nous disons quels types de page, quelles pages enfants sont autorisés à vivre sous notre page de liste de services, et pour cela, nous allons juste dire la page de service point de services et cela va se débarrasser de toutes les autres options sauf celle que nous spécifiez ici. C' est aussi une liste. Si nous voulions que cela puisse vivre ailleurs ou avoir des pages enfants partout ailleurs, nous pourrions définir cela aussi. Tant qu'il n'entre pas en conflit avec les types de page parent définis maintenant, ce n'est pas applicable dans notre situation actuelle. Donc je vais juste sauver ça. Et quand je rafraîchis cette page, la page de liste de services ne sera pas là. Et il supposera automatiquement que j'essaie de créer une page de service juste comme ça et allons vérifier notre arbre. Nous avons une page de service ici et nous pouvons ajouter une autre page de service. Oh, tu regardes ça ? En fait, nous pouvons ajouter une page de liste de services à notre page de service. Nous pouvons aller Route Page d'accueil service de liste de service, détail, service, liste, service , détail, liste de service, détail de service, détail de service. On ne veut pas ça non plus. Donc, nous allons tout d'abord, nous commentons ce qui va résoudre ce problème. Mais dans son modèle de page de service, nous pouvons également dire que certains types de page sont égaux à, et disons que nous ne voulons pas de types de sous-page du tout. Nous allons juste fournir une liste vide ici. C' est ça. Allez-y et sauvegardez ça. Retourne une page. Et maintenant, nous ne pouvons même pas créer une page enfant sous nos pages de service. C' est parfait. C' est là que je me retirerai va finir. On a donc une page d'accueil. C' est celui-là. Nous avons une page de liste. C' est celui que nous écoutons actuellement. Toutes les pages enfants sur Terre, Enfants pages et ensuite nous avons les pages enfants eux-mêmes. C' est la page détaillée du service de la page Service, et elle ne peut pas aller plus loin. Donc, nous avons effectivement dit que c'est aussi loin que cela peut aller sur cette route. Maintenant, nous avons mis en place une structure appropriée pour l'endroit où nos pages peuvent vivre. Quelles pages peuvent être leurs parents ? Quelles pages peuvent être leurs enfants ? Mais nous avons un autre problème. Disons que notre site sur Lee devrait jamais avoir une page de liste de services et nous disons et page enfant à notre page d'accueil. Nous pouvons avoir autant de pages flexibles que nous voulons. C' est ce qu'on veut. Nous voulons autant que le client du client ou l'entrée de contenu que les gens veulent créer, mais nous ne voulons pas servir les pages de liste. C' est déroutant pour l'entrée de contenu. Essayons donc de se débarrasser de celui-ci. Maintenant. Nous faisons cela d'une manière légèrement différente car nous avons déjà spécifié les types de page parent. Nous avons déjà spécifié les types de page que les pages enfants peuvent être. On va simplement dire que Max Count est un. ne peut y avoir qu'une seule page de liste de services jamais sur ce site Web. Donc maintenant, je vais revenir à une page enfant, et cela suppose automatiquement que je vais créer une page diverse flexor parce qu' il n'y a pas d'autres options que je ne peux plus créer pour les pages de liste de service. Il y a encore une chose que nous devons faire ici sur notre route. Nous pouvons créer une autre page d'accueil si nous le voulions. Je pense que nous devrions limiter cela parce que ce n'est pas une installation multi-site de Wag Tail. Il s'agit d'une isolation de site unique de remué, également avec la queue Wag. Dans Django, vous avez plusieurs sites Web en cours d'exécution d'une installation de Django ou attendez, mais pour ce cas, je veux juste pouvoir seulement créer une page d'accueil en dessous de la route. Alors allons de l'avant et ouvrir les modèles maison dot pie, et nous allons dire que Max Count est aigle toe un, et cela limitera à jamais avoir une seule page d'accueil sur l'ensemble du site. Nous pouvons également, même temps, faire certains types de page est égal à, et nous savons que la page d'accueil ne va jamais avoir deux types de page différents. Maintenant, cela est déjà pris en charge en raison des types de page parent que nous avons définis. Mais nous pouvons restreindre cela encore plus en disant que les types de sous-page ne peuvent jamais être qu'une page flexible qui est déjà une règle acceptée et une page de liste de services points de services. Et pour rappel, c'est le nom de notre application, et c'est le nom de notre modèle. Donc c'est d'être sauvé. Et quand je vais ajouter une autre page à root, cela ne nous donne aucune option du tout. Et c'est ainsi que nous allons limiter nos pages. Maintenant, vous pensez peut-être que c'est inutile. Je ne veux pas faire ça, et tu seras le meilleur juge pour ton site web. Que ce soit bon pour vous, votre client, votre contenu, les gens d' entrée, c'est un appel de jugement que vous allez devoir faire. Mais personnellement, j'aime définir ceci de sorte que lorsque mes clients viennent sur un site Web comme celui-ci et qu'ils veulent créer une autre page ici, une autre page de liste, Eh bien, ils ne peuvent pas. Cela va briser une partie de la logique que nous avons déjà intégrée à ce site Web. Ou au lieu de pouvoir créer une autre page de service sous une page de service et continuer pour toujours, ils ne peuvent jamais créer des pages de service sous la page de liste et encore cela aide à maintenir notre logique en tant que développeurs dans le code. Donc je pense que c'est Ah, vraiment puissant ensemble de fonctionnalités ou un trio de fonctionnalités. Si vous ne pensez pas que cela soit utile, vous n'avez pas besoin de l'implémenter. Tout cela est facultatif. Sinon, si vous l'aimez, n' hésitez pas à l'utiliser. Il est livré au four avec Wag Tail 32. Menus de navigation: Notre site web se réunit très bien, mais il n'y a toujours pas de véritable navigation. On a de faux liens ici qui ne vont nulle part. La navigation est absolument vitale pour un site web. On ne l'a pas encore construit. Donc, nous allons commencer par créer de nouvelles applications appelées menus avec le python standard géré haut menu de démarrage. Alors ouvrez votre terminal et exécutons Python managé haut des menus de démarrage, et je vais juste réexécuter mon serveur là-bas. Et quand j'ouvrirai mon éditeur, je vais voir fermer ce truc. J' aurai un nouveau dossier ici appelé Menus. On n'aura pas besoin de vues, alors je vais m'en débarrasser. On n'aura pas besoin de vues, On n'aura pas besoin de tests, alors je vais m'en débarrasser. On n'aura pas besoin d'administrateur. On va se débarrasser de ça. Donc j'ai juste des migrations dedans. APS et modèles, pas tarte. Maintenant, dans nos modèles haut fichier, nous allons finir par créer un élément de menu sur la classe de menu. D' abord, on va devoir créer un nouveau menu, un modèle de cholestérol. Nous n'avons pas travaillé avec des modèles de cholestérol, mais cela nous permet essentiellement de sauvegarder plusieurs objets à la fois sans que d'autres objets soient créés ou n'aient besoin d'être créés à l'avance afin qu'ils puissent tous enregistrer en même temps. Maintenant, la raison en est qu'un menu où il n'y a probablement qu'un seul menu, mais il va avoir un élément de menu, un autre élément de menu et un autre élément de menu, et nous voulons que tous ces éléments soient essentiellement sauvegardés en même temps. Nous voulons aussi que ceux-ci soient réordonnés un ble, donc nous allons utiliser une chose appelée un ordre arable. Donc je vais nettoyer ça, et la première chose que je vais ajouter est un cours appelé Menu, et ça va être un modèle à base de plantes, et nous avons un modèle de cholestérol importé. Cela provient du paquet appelé Model Clusters. Faisons à partir de modèles de points de cluster de modèles importer le modèle arable de cluster, et maintenant nous pouvons l'utiliser. Suivant. Nous voulons que notre menu ait une sorte de titres que nous puissions identifier, et nous voulions aussi avoir une sorte de limace pour que nous puissions facilement l'identifier dans notre modèle de sorte que lorsque nous avons essayé d'accéder à ce menu à partir de, disons, une balise template, nous pourrions simplement passer dans une limace particulière. Fondamentalement, c'est un texte basé I D, et nous serons en mesure de le trouver assez facilement. Alors allons-y et faisons-le. Le titre est égal aux modèles dot char champ Max Learning chose. Donnons juste une longueur maximale de 100 caractères, et la limace va être quelque chose qu'on appelle une auto Slugs. Champs. Faisons un champ auto slug, et nous ne l'avons pas encore utilisé, mais nous allons entrer dans cela dans juste une seconde. Donc, disons que ce champ de limace automatique doit être rempli à partir du titre. Et ce que cela veut dire, c'est, s'il n'y a pas de limace, prenez la limace de titre Si je l'utilise et nous allons aussi dire que c'est comestible maintenant. Auto slug Field provient d'un autre paquet, différent, et vous n'avez pas besoin d'utiliser le champ slug auto si vous ne voulez pas. Vous pouvez simplement utiliser des modèles de champ char esquivé si vous le souhaitez. J' aime utiliser le champ auto slug car il me permet d'être un peu plus paresseux en faisant entrée de contenu, et je pourrais simplement spécifier le titre frappé Entrée, enregistrer le modèle ou Enregistrer le menu, et il en créera un pour moi si Je le voulais. Eso allons-y et utilisons le champ auto slug. Cela va provenir des extensions Django, que je ne crois pas que nous avons réellement installées en ce moment. Django extensions dot tv champs point Importer auto, champ slug et nous allons voir ce qu'un terminal dit. Il ne dit absolument rien, et c'est parce que c'est une toute nouvelle application. Nous devons l'ajouter à notre nouvel APS. Donc, dans notre basé sur la tarte, nous allons ajouter des menus. C' est juste le nom du dossier. C' est essentiellement ce que je viens d'appeler ça, toutes les lacunes appelées menus. Donc ça va correspondre à cette proximité que nous allons rafraîchir notre terminal. On y va. Ça a l'air plus sain. Aucun modèle nommé extensions Jango. Donc on va annuler cette extension Do Pip installer Django, Cool beans. Réexécutons notre serveur. Il ne se plaint plus, et continuons ici. Donc nous n'allons pas encore faire nos migrations. Nous allons ajouter un peu plus de choses ici, donc parce que nous allons finir par enregistrer ça avec des queues de wag, modéliser, mec, nous devons donner ces panneaux si nous lui donnons des panneaux. Cela veut dire que les champs qui le disaient à nous seront exposés pour que nous puissions dire, Hey, donnez-lui un panneau pour un titre et donnez-lui un panneau pour la limace et ceux-ci existeront. Ils deviendront éditer Herbal. Vous serez en mesure de changer le titre ou d'ajouter le titre et de modifier ou d'ajouter une limace. Donc, c'est à un panneau de terrain ici. Celui-ci va être titre, et ajoutons un panneau de champ de plus, et celui-ci va être appelé panneaux de champ Slug non plus importé. Alors faisons ça. Donc, nous allons faire à partir de ma queue dot admin dot edit handlers import field panel check terminal je n'ai aucun type de est probablement, et nous avons presque fini avec cette partie. Donc, ensuite, lorsque nous finissons par créer une migration pour cela va créer une classe appelée Menu dans la base de données efficacement. Et chaque fois que nous l'utilisons, il n'a pas de nom à appeler lui-même, donc il va probablement lui donner le nom de la mémoire qui est allouée. Donc, comme parfois dans le code python, vous verrez quelque chose qui est comme, Ah, vous savez, quelque chose comme ça ressemble quelque chose dans ces lignes. Si vous avez vu quelque chose comme ça, c'est un peu de mémoire qui est alloué dans votre ordinateur. Donc, au lieu de dire que, c'est le nom de celui-ci, nous allons dire que nous allons écraser ceci avec une chaîne, un titre auto retour. Et maintenant, nous disons que chaque fois que nous accédons à un menu, l' objet va être appelé Quel que soit le titre maintenant, ce point, annulons notre serveur et faisons python gérer dot pie. Rendre les migrations cool. J' ai quelques migrations de la dernière vidéo que nous avons fait avec des trucs de page flex, et j'ai créé un nouveau modèle pour le menu qui est votre python géré haut migrer. Tout a bien été appliqué, le serveur de trois coureurs, et nous ne verrons rien dans notre avènement. On n'a rien enregistré ici, donc on ne verra rien aller d'un pas plus loin. Nous avons aussi seulement un menu. Nous n'avons pas d'éléments de menu, alors allons de l'avant et ajoute un élément de menu Maintenant. Maintenant, c'est là que ça va devenir un peu plus difficile à comprendre à ce stade, c'est Vous pouvez penser à cela comme un modèle régulier et comme un titre a une limace, et finalement nous allons créer des éléments de menu et nous allons le relier à ce menu. Donc, je vais créer une classe appelée élément de menu et ce sera un ordre. Un bol. Maintenant, nous n'avons pas d'ordre Bols importé encore. Alors faisons de façon à la décoration que les modèles importent ou durable. Maintenant, quel genre de fonctionnalités voulons-nous notre menu orteil Voulons-nous que cet orteil ait une sorte de titre de lien  ? Nous avions besoin d'avoir une sorte de lien vous où moi et disons que ça va être un lien externe. Ah, on va créer une page de lien. Ce sera un lien interne et peut-être un open dans une nouvelle option d'onglet, et ce sera un booléen. Donc, essentiellement ce que nous allons faire est pour chaque élément de lien ici, il va avoir du texte. Il va avoir une page interne et externe et l'option d'ouvrir dans un nouvel onglet ou non. Donc c'est un peu de pseudo codage. Allons-y et ajoutez-les ici. Alors ajoutons des modèles. Champ Char vide est égal à true. Non est égal à vrai. En fait, nous n'avons pas besoin d'ajouter no est égal à true, car Blank est égal à true. De plus, c'est un champ de char, mais Adam longueur maximale de 50. Le lien que vous allez bien être un ing externe, donc ce sera typiquement, disons, un champ ul. Mais cela pourrait aussi être un lien d'ancrage d'oeuf vers le bas de la page quelque part. Donc, il pourrait juste être un lien qui ressemble beaucoup à ce bas ou contact et vous allez vous faire défiler vers le bas de la page. Alors peut-être que c'est ce qu'on veut. Donc nous allons laisser ça ouvert avec HR Field. Donnez cela sur une longueur maximale de 500 parce que les liens externes sont assez longs, et il peut également être vide avec notre page interne. Allons de l'avant et créons une clé étrangère à n'importe quelle page de queue de wag sur notre site, donc nous allons dire des modèles sur clé étrangère. Attends jusqu'à ce qu'ils disent la page principale. Quoi qu'il en soit, dites à Paige et chacune de nos pages hérite de cette page régulière. Donc, si nous disons que nous vérifions la maison, notre page d'accueil est en train d'importer cette page. Et si nous venons ici, nous allons voir qui vient de Attendez jusqu'aux modèles de base Page droite Ne pas core dot models page make decor Etre la page AP étant le modèle no est égal à vrai. Oui, il n'y aura pas de blanc égal à vrai. Oui, ça pourrait être vide. C' est facultatif. Nous allons aussi nous donner un nom connexe, mais nous ne lui donnerons pas de nom particulier. On n'utilisera pas ça. Donc, nous allons fondamentalement juste abandonner ce Related, nommé en utilisant un signe plus, puis sur supprimer ce qui se passe lorsque nous supprimons les pages qui sont liées. Teoh. Donc, si nous avons lié à une page de contact et que nous supprimons la page de contact, qu'advient-il de cet élément de menu ? Nous allons dire que cet élément de menu est détruit en cascade et enfin, nous avons ouvert dans un nouvel onglet et c'est simplement un champ booléen, donc un champ booléen est un vrai ou faux par défaut est égal à false et vide est égal à true donc il pourrait être facultatif n'a pas besoin d'être vérifié. Et parce que encore une fois, nous allons montrer ça sur notre chemin. Telemann. Finalement, nous allons l'enregistrer dans le Wag en disant aux hommes le modèle qu'il est homme, nous devons dire, Hey, bousculé Oh, nous voulons que vous montriez vraiment tout ça. Donc, continuons et créons un panneau de champ pour le titre Lien. Nous allons créer un autre panneau de terrain qui devient un peu bas là-bas. Nous allons créer un autre panneau de champ pour le lien. Vous êtes l ce lien externe que vous êtes. Je nomme probablement ce lien externe vous Eh bien, si nous voulions Teoh, nous allons créer un panneau de sélection de page pour la page Lien. C' est notre page interne. Si elle est sélectionnée et que nous allons créer un panneau de champ supplémentaire pour notre champ booléen appelé Ouvrir dans un nouvel onglet, nous n'avons pas encore importé notre panneau de sélection de page, alors continuons et importons notre panneau de sélection de page. Maintenant, tout est bien et bien. Mais l'élément de menu et le menu, autre que d'être dans le même fichier, n' ont aucun rapport les uns avec les autres. Nous devons créer une sorte de relation. Maintenant, ce que je vais à dio, c'est que je vais exécuter à nouveau les migrations et les migrer exécuter le serveur . Et cela va juste créer cet élément de menu pour moi. Maintenant, je veux lier cet élément de menu au menu lui-même, et nous allons voir que cela pourrait être fait avec une chose appelée une clé parentale. Et il va lier à la classe de menu, et il va avoir un nom connexe que nous allons réellement utiliser. Ce nom connexe va être appelé éléments de menu. Maintenant, allons de l'avant et importons la clé parentale, et je ne me souviens jamais d'où vient celle-ci. Eso Vous pourriez me voir faire une erreur ici. Je pense que pour un cluster de modèles champs points Importer perent. Euh ha. C' est probablement la première fois que je l'ai eu dès le premier essai. Clé parentale. Donc maintenant que dire Hey cette page ou n'a pas besoin d'être appelée Page, il pourrait littéralement appeler n'importe quoi. Il a juste besoin d'avoir une sorte de connexion avec notre menu ici, alors sauvegardons cela. Exécutons à nouveau les migrations, et ce n'est pas un champ de cluster de modèle. Je savais que j'allais me tromper ? Je pense que c'est un modèle plus proche des champs. interrogation. C' est là. OK, allons-y. Effectuez des migrations. Et maintenant cela demande Hey, vous essayez d'ajouter un champ non crédule appelé page à l'élément de menu sans défaut, nous pouvons le faire. La base de données doit remplir avec quelque chose là-dedans. Allons de l'avant et sélectionnez l'option numéro un, et je vais simplement taper none. Allez-y et migrez cette réexécution de son serveur. Ok, les choses sont un peu mieux quand elles n'étaient pas mauvaises de toute façon, mais les choses semblaient qu'elles commencent à se mettre en forme maintenant. C' est Ah, allons-y et enregistrons ça avec Wag Tail pour qu'on puisse y accéder ici. Maintenant, il y a deux façons de le faire. Nous pouvons enregistrer ceci comme un extrait ou nous pourrions simplement l'enregistrer dans le menu de la section ici. J' aime l'enregistrer avec la section de menu. Ça se sent juste un peu mieux. Donc, à côté des modèles, pas de tarte, je vais créer une marque que vous déposez ici appelée Wag Tail hooks dot pie et il doit absolument être appelé. Attendez que le soulignement accroche la tarte à points. Alors, ici. On va faire deux choses différentes. Nous allons importer sur le modèle Edmund, et nous allons également importer le tarif Deco Decorator. Ou puis nous allons aussi créer une nouvelle classe. On va appeler ça des hommes, tu admets, et ça va être un mannequin Inman, et on va enregistrer ça. Alors allons de l'avant avec le 1er 1 et juste faire l'importation de Attendez jusqu'à point avec la devise Trib Edmon dot options Importer modèle Littmann. Nous allons également importer le registre d'administration du modèle. Nous allons ensuite créer ce modèle d'héritage de classe Litman le modèle White Tail Lydman Nous allons dire, quoi ? quel modèle cela vient-il ? Qu' est-ce qu'on admet en fait ici ? Nous allons dire, enregistrez cet élément de menu maintenant Nous devons importer cela aussi. Donc, à partir des modèles de points, les modèles de menus importants proviennent exactement du même dossier afin que nous puissions simplement utiliser des modèles de points qui vont juste ici. Importez la classe de menu, l'étiquette de menu qui contient des menus. L' icône de menu va être une liste Vous l ressemble aussi un peu comme un menu a besoin d'une virgule là-bas. L' ordre du menu. C' est là qu'il va être commandé dans le menu ici. Donc je vais dire que 200 ne se souviennent pas exactement où des centaines vont nous placer. Nous le découvrirons dans les paramètres. Menu est égal à false. Et c'est dire que nous ne voulons pas qu'il apparaisse ici et exclure de l'Explorateur est égal à faux. Ok, je vais juste redémarrer Django ici juste pour une bonne mesure parfois. SNC S'il avait redémarré seul, nous n'aurions pas vu que le calme de fuite n'a pas permis sans parenthèses environnantes. Et c'est parce que j'ai frappé. Entrer aurait dû être sur une seule ligne. Il était sur la dernière chose que nous avons besoin d'enregistrer ce registre d'administration modèle, et nous disons juste, Prenez ce modèle de classe entier Inman et enregistré avec le système de menu Wag Tails. Alors allons-y. Vérifions ça. Attendez de rafraîchir ça et attendons qu'il apparaisse ici. Allez, c'est là. Numéro deux menus. Allons de l'avant et ajoutons un menu. On va appeler cet en-tête de menu. Vous pouvez voir qu'il se remplit automatiquement lorsque je tape. C' est grâce au champ de limaces auto. Je vais appeler cet en-tête et vous remarquerez qu'on a un menu ici. Mais nous n'avons pas réellement de liens de menu. Nous devons l'ajouter. Revenons à notre modèle Stop high. Et même si nous avons une clé parentale à notre menu ici avec un nom associé des éléments de menu, il n'est pas réellement utilisé dans la base de données qu'il est utilisé. Mais nous n'avons tout simplement rien en fait, en termes de prison weg étant exposés maintenant parce qu'il pourrait y avoir plusieurs éléments, plusieurs éléments de menu et parce que nous allons utiliser une commande à base de plantes, ce qui nous permet de déplacer un élément de menu vers le haut ou vers le bas. Nous voulons utiliser une chose appelée un panneau en ligne, et cela va prendre le nom connexe. Ce sont les éléments de menu, et cela se rapporte juste à ce nom lié ici. Donc c'est exactement le même texte, et l'étiquette va être un menu unique. L' élément dans le panneau de ligne n'est pas importé, alors nous allons importer ce terminal et ne nous plaignons pas. C' est une bonne nouvelle. Allons-y, actualisez cette page et maintenant nous pouvons ajouter un élément de menu et un autre élément de menu et un autre élément de menu , et nous pouvons mélanger et faire correspondre ceux-ci dans l'ordre que nous voulons. Ajoutons un nouvel élément de menu, et ce sera un lien vers nos services. Et nous allons dire que ce sera une page de queue de wag quand nous allons en créer une autre ici à propos de nous et nous allons créer un lien vers une autre page détaillée appelée propos de nous sauver. Et juste comme ça, nous avons un système de menu en place sur le dos, mais sur le front veulent vadrouille ? Cela ne fonctionne toujours pas parce que nous n'avons encore rien mis en œuvre. Et la prochaine leçon, nous allons créer une balise de modèle où nous pouvons réellement aller de l'avant et saisir ce menu de notre modèle et parcourir tout ce que nous devons pour créer notre menu ici, nous allons également créer le pied ou le menu. Ici va être exactement le même menu, donc nous allons l'utiliser à deux endroits différents. 33. Modèles de menu navigation: Ok, Dokey. Dans notre dernière vidéo, nous avons créé un système de menu où nous pourrions réellement aller de l'avant et ajouter un menu. Nous avons plusieurs menus si nous le voulions, mais nous en avons créé un appelé Header. Et si nous éditons ceci, il y a deux éléments de menu ici que nous pourrions déplacer vers le haut ou vers le bas, grâce à une chose appelée Order Arable. Cependant, nous n'avons toujours pas accès à cela ici. Maintenant, il y a plusieurs façons d'accéder à ce menu sur chaque page. L' une de ces façons consiste à utiliser une balise de modèle. Nous allons prendre cette route au lieu de créer un objet global accessible sur chaque modèle. Nous allons juste utiliser la façon de la balise template. Nous allons donc créer notre première balise de modèle. Maintenant, je vais aller de l'avant près que nous allons créer un nouveau dossier appelé Template Tags tout un mot, et puis ici nous allons créer un autre nouveau fichier ou le premier nouveau fichier là appelé Menu Tags dot pie et ce nom est va être important, et je vais faire référence à ça dans un peu. Maintenant, nous allons créer une balise de gabarit Django simple. Donc, lorsque nous ouvrons notre point d'en-tête html, nous avons vu d'autres balises de modèle, donc nous avons un modèle statique. Je peux voir qu'on l'utilise ici. C' est une balise de modèle. Lorsque nous utilisons les images d'attente, nous utilisons la balise de modèle d'image. Nous allons maintenant créer notre propre tag template, et celui-ci va juste être une balise simple. Allons de l'avant et disons, à partir de Django, Importer modèle de Let's Go vers les dossiers vers le haut ou oui, un dossier sur, Allons un dossier vers le haut, Aller aux modèles et importer notre menu. Nous allons avoir besoin d'ajouter Register est égal à la bibliothèque de points de template, et cela va nous aider à enregistrer cela. Ces tags que nous pouvons nous utiliser dans un style décorateur. On va dire, sourds, prends le menu. On va passer une limace dans le modèle et ensuite on va retourner un truc. Et pour que cela devienne réellement une balise de modèle appropriée. Nous devons alors dire registre dot tag simple, et maintenant nous pouvons bien nous utiliser. Et maintenant, nous pouvons utiliser cela à l'intérieur de notre modèle, et c'est vraiment aussi facile que d'aller dans Disons un fichier d'en-tête et de dire Charger les balises de menu. Tu te souviens quand j'ai dit que j'allais faire référence à ce nom ? Les balises de menu est un menu balises haut fichier qui est important. Ces noms vont correspondre. Et ce que cela dit, c'est que toutes les balises qui sont disponibles dans ce fichier sont maintenant autorisées à être utilisées à l'intérieur de notre modèle. Nous avons donc maintenant accès à une balise de modèle appelée Get Menu. Donc si nous allons de l'avant et nous appelons US, je reçois le menu. Il faut un paramètre par slug. Appelons cet en-tête et d'où je l'obtiens est l'en-tête slug. C' est pourquoi nous avons une limace ici pour que nous puissions la sélectionner. Alternativement, vous pourriez bien utiliser les idées, mais ils changent au fil du temps. Si quelqu'un devait accidentellement supprimer cet en-tête et créer un nouvel en-tête que je vais changer et que vous aurez besoin d'un sourd s'impliquer, ce n'est tout simplement pas une façon de vivre votre vie. Donc, si vous utilisez ah slug, ce problème est en fait assez facilement résolu. Et maintenant, nous allons le dire comme une variable appelée Navigation. Et ici, je vais ajouter H un et je vais imprimer la navigation pour aller de l'avant et rafraîchir notre page ici. Oh, les menus. Les balises n'ont pas encore été enregistrées. Ok, c'est super venir. Donc une des deux choses se passe ici. Soit je n'ai pas enregistré cette page, soit parce que parfois, lorsque vous travaillez avec des balises de modèle, même si vous avez fait une modification, Django ne remarque pas toujours que les fichiers de balises de modèle changent. Et donc il ne va pas redémarrer lui-même. Donc je vais juste donner un peu de coup de pied à Django ici et redémarrer mon serveur Django trois fraîcheur. C' est là. Ah, quelque chose. Maintenant, dans le modèle, ça ne dit rien ici. C' est écrit navigation. Maintenant, pour suivre cela en arrière, nous avons un livre très appelé Navigation et nous avons une fonction appelée Get Menu avec un paramètre d'en-tête. Et puis nous l'assignons comme un projet de loi appelé Navigation. Dans nos balises de menus, nous avons une fonction appelée get menu. C' est seul paramètre est un slug, et il renvoie simplement ceci. Maintenant, nous devons réellement aller chercher cet élément de menu basé sur sa limace. Alors allons de l'avant et faire un essai que nous allons retourner menu est mort. Objets Doug get slug est égal à ce que la limace est. Et si vous vous demandez, hé, est-ce que vous obtenez la limace est égale à la limace ? Nous disons que le menu dot slug a un champ appelé slug est égal au paramètre appelé slug. On pourrait facilement échanger ça pour dire quelque chose comme la limace si on voulait le rendre un peu moins confus. Je vais vous laisser le soin. Si vous voulez faire cela, exécutons une exception ici juste au cas où cet objet de menu n'existe pas. Faisons une exception. Le menu n'existe pas. Retourner les objets point point aucun, et ce que cela va faire est si nous ne pouvons pas trouver un menu qui a l'en-tête, où a le slug de l'en-tête ? Il va attraper cette exception parce que Jenga va nous jeter une exception et va nous donner une réinitialisation rapide sans rien en arrière. Donc, il nous donne toujours un honorable de sorte que lorsque nous allons finalement à Luke ensemble sur les éléments de menu dans notre modèle, cela ne va pas nous donner aucune sorte de problèmes. Donc je dis que je vais toujours donner un peu de coup de pied à ça même si on dirait qu'il a fait lui-même cette fois-ci. Et quand je me rafraîchis ici, il dit simplement en-tête. Maintenant, la raison pour laquelle cela dit en-tête avec un âge capital est parce que le titre est appelé en-têtes. Disons en-tête avec, Ah,un Ah, nom différent et allons de l'avant et juste changer cela aussi. En-tête enregistrer et je vais rafraîchir mon modèle à nouveau. En-tête avec un nom différent. Si vous vous demandez de quoi il s'agit dans notre menu lui-même, rappelez-vous, rappelez-vous, nous avons mis Dunder Stringed sous et il est juste de se retourner bien, ce titre. C' est ce que nous avons mis ici. Aussi, c'est ce que nous avons mis ici. Donc, le champ de titre est en-tête avec un nom différent. Le champ Titre est l'en-tête avec un nom différent et la chaîne la représentation sous forme de chaîne. Le nom de chaîne de cet objet particulier est appelé, quel que soit le titre, donc c'est de là que nous obtenons cela. Donc, si vous voyez que les chances sont que vous obtenez juste l'objet de menu lui-même et que vous devez le parcourir. Alors allons de l'avant et passons à travers ça maintenant et je vais m'en débarrasser. Et où sont nos ici ? Il est quatre i dans 123 Donc, cela va juste créer trois liens pour nous, et nous voulons juste dire, au lieu de quatre I pour l'élément dans les éléments de menu de points de navigation tous maintenant cela va à nouveau devenir un peu confus. Donc, nous disons que pour la navigation qui est toute la classe de menu, tout le menu objet cette page entière essentiellement points éléments de menu dans notre code. Nous avons un panneau en ligne avec un nom associé utilisant des éléments de menu, donc il saisit tous ces éléments de menu tous donc il va les obtenir tous et nous allons boucler chacun d'eux , accord ? Et faisons juste un petit test ici et nous allons imprimer le texte du lien de menu. Alors revenons ici. Et qu'est-ce que ça va être ? Le titre du lien est ce qu'il est appelé menu dot link title ou item chéri title. Plutôt. Donc, pour chaque élément de menu que nous avons, nous allons l'appeler élément, et ensuite nous allons obtenir le titre du lien. Allons de l'avant page de mise à jour, et ici nous pouvons voir les services et à propos de nous, donc cela fonctionne réellement. Maintenant, nous devons échanger ce lien ici, et nous allons le faire dans une déclaration if et ensuite nous allons réduire cette déclaration if pour avoir un peu plus de sens. Donc nous avons une des deux choses que nous avons déjà travaillé avec ça avant. Nous avons l'une des deux propriétés que nous pouvons utiliser. Lien. Vous êtes L. Ce qui va être juste un texte normal ou une page de lien. Donc, vérifions toujours s'il va y avoir une page de lien en premier. Donc, nous pouvons dire si point point point point page de lien, nous pouvons imprimer la page de lien point d'article que vous êtes l et nous faisons le point vous, Earl, parce que cela va être une page de détail moyen. Nous pouvons aussi le faire. Point de l'article LF Qu'est-ce qu'on a appelé ce lien ? Vous êtes l Celui-ci est juste un texte régulier. Donc affaiblir l'élément dio ne vous lie pas bien et mettons autre ici un lien vide fondamentalement, et c'est à ça que ça va ressembler. Donc, si nous lisons ceci, cela va dire s'il ya un wag HelpAge une page de lien imprimer Oh, que vous Earl, s'il n'y en a pas un, mais il y a un lien. Eh bien, un lien externe. Imprimez ce texte, peu importe ce qui finit par être. Et s'il n'y en a ni l'un ni l'autre, montre-nous un signe de numéro régulier comme un lien, et ce lien n'ira nulle part. Alors effondrons tout ça ensemble. Donc tout ce que je fais, c'est mettre ça sur une ligne, une ligne brute de rial. vais couper ça, et je vais l'emménager ici. Maintenant, disons ça et rafraîchissons notre page. Et quand je clique sur ce service sur nous Oh, regarde ça. On a un système de navigation qui fonctionne, d'accord ? Mais nous avons encore une chose que nous avons ajoutée ici que nous n'avons pas implémenté l'open dans un nouvel onglet. Donc, dans notre lien ici, nous voulons aussi dire ok, si l'élément est censé être ouvert dans un nouvel onglet, donnons à ceci une cible de Blank. Et si non, je n'ai défini aucun de ces liens pour ouvrir dans un nouvel onglet afin que vous puissiez tester cela par vous-même . Mais je vais juste laisser ça tel quel, parce que je suis plutôt content de ça maintenant. Nous avons également travaillé avec des instructions If comme celle-ci auparavant, et nous avons réellement déplacé dans la logique Mawr Python afin que nous n'ayons pas trop de logique de modèle . Et cette page a une bonne quantité de logique de modèle. Donc, ce que nous pouvons faire ici, c'est que nous pouvons simplement dire lien point d'élément, mais nous devons créer cela d'abord. Revenons à nos mannequins, cette tarte. Et dans notre élément de menu, ajoutons une propriété jangle ici avec un décorateur à la propriété Deaf Link self. Et ce sera le lien point dans le modèle que nous pouvons Vous. Donc maintenant, nous pouvons utiliser l'article ne pas lier ce que cela retourne, C'est ce que l'article ne lien pas va être. Et nous pouvons dire si la page de lien de doute de soi alors nous pouvons retourner la page de lien auto point, n'est-ce pas, Earl ? Et c'est vraiment la même logique que nous venons de mettre dans notre modèle. Nous le faisons juste dans python house sont les modèles peuvent rester gentils et propres. Maintenant, nous allons dire LF Self dot lien vous êtes l et encore une fois je suis juste obtenir ces champs d' apparaître je pense que le lien de page vous bien, retourner l'URL de lien auto-point sinon toujours retourner un simple, lien vide, et c'est juste va toujours retourner la chaîne. L' autre chose que nous avons dit était que le titre du lien peut être vide, donc techniquement le titre du lien pourrait ne pas exister. Allons de l'avant et disons , Si c'est vide, attribuons que Si c'est vide, c'est quelque chose de différent. Donc encore ici, nous allons créer une nouvelle propriété et nous pouvons également utiliser ce modèle interne. Propriété sourd Titre Self. Maintenant, ce que nous allons dire est s'il y a une page de lien et qu'il n'y a pas de titre de lien auto-point , donc fondamentalement le titre du lien a été ignoré, mais il y a une page Wag Tail a été sélectionnée. Nous allons retourner que Attendez jusqu'à ce que les titres de page lui-même point lien page point Titre est ce que nous allons retourner. LF il y a un titre de lien auto point retourner le titre du lien auto point et enfin, s'il n'y a pas de titre de lien et que nous utilisons un lien externe vers une autre page, nous pouvons simplement dire titre manquant Maintenant, dans notre modèle, nous peut utiliser des titres de liens et de points. Allons de l'avant et échangez-les contre le titre et cela va être agréable et propre avec lien point de l'article et c'est tout. Allez-y et actualisez cette page. Et bien sûr, il semble que rien n'a changé, mais nous avons réussi à simplifier notre modèle. Une dernière chose est que nous voulons maintenant ajouter ceci à notre pied de page. Donc c'est très, très facile. C' est littéralement la même chose qu'un en-tête. Nous allons copier toute cette ligne ici, donc faire sa copie que nous allons faire la même chose que nous l'avons fait ici. Nous allons faire exactement la même chose ici, et fondamentalement le même menu qui va être utilisé dans l'en-tête va également être utilisé dans son pied de page. Donc on va l'utiliser à deux endroits différents. Donc, il est ouvrir notre point de pied de page html. Nous avons besoin de charger des étiquettes de menus qui correspondent à nos menus, prend, je file coller ce gars là dedans. Donc nous allons exécuter la fonction get Manu. Le seul et unique paramètre pour le slug est Header. Nous assignons ceci comme navigation et au lieu de quatre I et 123 nous pouvons dire quatre éléments dans le point navigation Qu'est-ce que j'ai appelé ça à nouveau ? éléments de menu ? Pas tous. Et ici. Faisons simplement un titre de point d'élément de test simple et les balises de menus non enregistrées. Oh, intéressant, intéressant. Ok, c'est parce que j'ai appelé les balises de menu et que ça fait défiler vers le bas. Et on y va. Nous sommes arrivés à des services de liens et à propos de nous. Et si jamais nous voulions changer l'ordre de ça, nous pourrions littéralement appuyer sur ce bouton bas ou sur le bouton haut de ce coup sauver. Et quand je rafraîchis la page, il s'agira de nous, puis de services, puis de nous et de services, de services américains et de confirmation de nous et de services. C' est là que le projet de loi entre en jeu. La dernière chose que nous devons faire ici, c'est où est ça pour Loop ? Nous devons ajouter ce lien point point d'élément de lien, et je pensais que cela allait durer un, mais j'ai oublié que nous avons Si point d'élément ouvert dans Nouvel onglet, nous voulons que cela cible Blank, et c'est des pages de rafraîchissement. Assurez-vous que les choses fonctionnent comme prévu. Allons à la page des services. Oui, va à la page sur Yep. Et nous avons un système de navigation qui fonctionne. Maintenant, il y a un paquet non arable mentionné ici appelé Wag Tail Menus. Si tout ça est juste trop et que tu ne veux pas t'occuper de toute cette tête sur notre K H, je ne peux pas dire celui-là, mais sa façon secte. Del menus, il est allumé. Obtenez des hobbits sur tarte et vous pouvez lire à travers les quais ici. Nous ne allons pas couvrir cela dans ce cours, mais cela crée un système de menu vraiment sympa pour utiliser Wag Tail, et vous pouvez entrer dans, genre, certains menus et choses comme ça, que nous ne sommes pas à l'aide. Donc, si vous avez besoin d'un menu plus avancé, c'est peut-être la voie à suivre. C' est un très bon paquet, il semble garder les choses agréables et simples, et vous n'avez pas à gérer votre propre système de menu, ce qui est vraiment, vraiment sympa. Donc encore une fois, si ces deux dernières vidéos étaient un peu trop pour vous, n'hésitez pas à utiliser le package Wag Tail Menus 34. Formulaires de contact partie 1: peu près tous les sites web de nos jours ont besoin d'un formulaire de contact. Pas tous, mais la plupart d'entre eux le font. C' est un moyen facile pour vos spectateurs, vos lecteurs, vos acheteurs de contacter le propriétaire, les rédacteurs d'articles ou les responsables du site Web. Quelque chose comme ça. Wag Tail nous donne la possibilité de créer des pages de formulaire de contact spécial. Donc la première chose que nous allons faire est d'ouvrir notre terminal. Annulons cela et exécutons Python géré. Je commence AP. Celui-ci va être appelé contact, et cela aide si vous prenez le démarrage correctement. Réexécutons son serveur. Cachez cela et dans notre code, ouvrons sur la base de tarte et nous voulons avoir un contact ici. Aucun contact n'est le nom de l'application que nous venons de créer. Donc, si vous appelez votre page de contact, vous changeriez ceci en page de contact, et votre dossier sera également appelé page de contact. Votre APS indiquerait également la page Contact ici. Alors fermons ça et nous allons nous débarrasser de certains fichiers parce que ce sera une page de queue de wag . Nous n'avons pas besoin de notre point de vue. Beaucoup de tests ont déjà été écrits, et nous n'avons pas besoin de trucs d'administration. Nous allons garder nos modèles APS dedans et les migrations, cependant. Maintenant, pour créer une page de contact, nous devons faire quelques choses. Nous devons d'abord créer une page de contact de classe, et vous penseriez que cela proviendrait de Page. Mais il ne va pas venir de Page va venir de cette chose appelée un formulaire d' e-mail abstrait . Et l'importation pour cela est, si je peux me souvenir de cela correctement, il est point rectal avec Trib dot formes dot dot import form abstrait email formulaire qu'il avait qui me regarde droit. Non, n' oubliez pas à tout moment si vous ne vous souvenez pas de vos importations, c'est bon. Vous pouvez toujours vérifier les quais, ces air tous disponibles sur les quais aussi. Ce code et à tout moment, si jamais vous aimez oh, je veux un autre exemple de travail de presque tout ce qui est dans ce cours. Vous pouvez consulter le code source de ce cours, ou vous pouvez également aller à http. Obtenez herb dot com slash codage pour tout le monde slash appris. Attendez que ce soit le savant original. Dites cours tout le code source pour les cours de Wag Tail d'origine appris là-dedans. Je pense qu'il y a quelque chose comme 50 vidéos, donc il y a un tas de commits probablement comme 60 ish commits, et tout se divise en différents commits. Donc, si vous allez juste là-bas, vous pouvez vérifier tout le code source, et vous pouvez le diviser en fonction de la validation basée sur la vidéo aussi. Alors n'hésitez pas à vérifier cela si vous êtes intéressé à voir un autre exemple de la façon dont beaucoup de choses sont utilisées. Ok, donc dans notre page de contact ici, nous allons spécifier le modèle parce que j'aime faire cela, même si par défaut ce serait déjà contacts dernière page de contact. Mais dans notre page de contact, nous en avons aussi un autre. Nous obtenons un modèle de page de destination, et nous pouvons spécifier celui-ci. Maintenant, si nous ne spécifions pas celui-ci, je crois que ce que la queue de Wag fera automatiquement est juste un pan ajouter le mot soulignement atterrissage à votre page de contact. Maintenant, nous allons vous spécifier cela de toute façon, donc contact slash page de contact, point d'atterrissage html, et je fais cette étape plus petite là-bas. Notre page de contact devrait avoir n'importe quel type de sous-page. Certains types de page sont égaux à aucun. Nous ne voulons pas de pages enfant ici et dans un peu ce que nous allons faire est dans nos modèles maison ce tarte. Nous allons spécifier la page contact point de contact comme type de sous-page. Il est permis de vivre sous la page d'accueil. Maintenant. Je ne vais pas enregistrer ce fichier encore parce que selon notre code, rien de tout cela n'existe encore. Je n'ai pas encore enregistré ce fichier. Combien de formulaires de contact pouvons-nous avoir ? Je vais dire qu'il ne peut y en avoir qu'un comme un surligneur. Il ne peut y en avoir qu'un. Et quel type de champs voulons-nous dans cette page de contact ? Je veux une introduction qui va être une sorte de champ de texte riche, avec lequel je ne crois pas que nous ayons encore travaillé. Donc, cela va être, ah, ah, bon moyen de vous montrer comment utiliser le texte riche avec l'éditeur de perruque appelé queue de brouillon à l'intérieur d'une page réelle. Nous allons, ah, créer ah, un message de remerciement penser que vous textez. Cela va également être un champ de texte enrichi juste à cause de la conception avec laquelle nous travaillons . Je sais qu'il va y avoir une image de carte, et ça va être une clé étrangère d'une image de queue de wag et peut-être d'une carte. Vous êtes l Si quelqu'un veut nous contacter et ce sera vous êtes tous sur le terrain. Donc je fais juste un pseudo codage ici, pas vraiment écrire un de ces champs ? Pas encore. Quoi qu'il en soit. Nous avons ces champs et nous voulons que Wag Tail nous expose ces champs. Nous allons dire que les panneaux de contenu sont égaux à, et ce que nous avons toujours fait, c'est que les panneaux de contenu sont égaux à des panneaux de contenu de points de page, puis nous y ajoutons une liste. Mais nous n'avons pas encore de page ici. Nous avons un formulaire de courriel abstrait, et ensuite nous pouvons ajouter nos panneaux de champ et d'autres choses ici. Ajoutons donc un panneau de champ pour notre champ d'introduction, qui n'existe pas actuellement. Ajoutons un panneau de sélection d'images pour notre image de carte. C' est à un panneau de terrain régulier pour notre carte. Tu es la carte Earl, tu es voilà où les trucs spéciaux entrent en jeu. Nous avons besoin d'un panneau en ligne pour nos champs de formulaire, nous n'avons pas encore créé celui-ci, donc celui-ci va être un peu spécial. On va appeler celle-là. Donnez-nous une étiquette spéciale appelée Form Fields. Nous reviendrons à ça dans une seconde. Nous ne faisons que cartographier nos panneaux de contenu en ce moment, basés sur des champs qui n'existent même pas. Donc nous avons un pseudo code, nous allons remplir ça, nous allons remplir ça, puis nous allons ajouter notre champ de formulaire. Donc nous sommes en quelque sorte partout parce que nous avons plusieurs choses différentes sur lesquelles nous devons travailler pour que cela fonctionne. Je veux aussi mettre un panneau de champ ici pour le texte de remerciement. message de remerciement. Ça va être un panneau de champs de texte enrichi. Et nous avons également un panneau de terrain pour une adresse de départ. Et nous avons un autre pour l'adresse, que nous n'avons pas fixé. Mais cela fait en fait, vient avec notre formulaire de courriel abrégé. Donc, si j'ai sauté une définition ici, c'est le code source. Nous avons un pour traiter une adresse de départ et un sujet que nous n'avons pas encore ajouté, alors allons de l'avant et ajoutons un panneau de champ pour le sujet. Maintenant, à ce stade, si vous deviez enregistrer ce fichier, vos terminaux vont paniquer, ça va dire que beaucoup de choses ne sont pas importées et nous allons y arriver. Nous allons faire toutes les importations à peu près à la fois. Allons de l'avant et réparons certains de nos champs maintenant. Donc, cette introduction va en fait être une chose appelée un champ de texte riche. Un champ de texte enrichi approprié. Est-il permis d'être vide ? Oui. Et quelles fonctionnalités voulons-nous activer ? Maintenant, c'est un peu comme le bloc de texte enrichi que nous avons ajouté pour nos champs de flux. Seul celui-ci se trouve sur un champ de page. Nous allons activer gras I not italic link list ordonnée et une liste sur ordonnée. Et notre texte de remerciement va être très similaire aussi. Donc, nous allons dire que le vide est égal à vrai et que les fonctionnalités vont être la liste des liens de la carte et une liste des erreurs de Nord. Notre image de carte va être une clé étrangère, donc nous faisons des modèles de clé étrangère et c'est ainsi que nous finissons par sélectionner une image de queue de wag. Attendez. Tell image est en fait des images plurielles image point. On va dire que ça peut être totalement non si on le voulait. Mais lorsque vous créez cette page lorsque vous modifiez cette page, cela ne peut pas être non. Donc, nous allons dire que Blank est faux sur supprimer ce qui se passe lorsque vous supprimez cette image ? Nous allons dire les modèles dot set No. Donc, il ne va pas supprimer cette page. Il va juste définir ce champ pour connaître le texte d'aide. Disons que l'image sera corrompu cul Teoh quelque chose comme, je ne sais pas, 5 80 pixels par 355 pixels plat. Et le nom associé va être plus parce que nous n'avons pas besoin de ces noms connexes. Donc c'est dans un sens, jetez ça. La carte. Vous allez toujours être des mannequins. Commencez vous êtes l Champ vide est égal à vrai. Et ajoutons du texte d'aide et disons que c'est facultatif. Si vous fournissez un lien ici, l'image de la carte deviendra un lien. C' est l'idée de toute façon, et maintenant nous avons toutes sortes de choses que nous devons importer. Ah, mais avant même que nous fassions ça, nous avons ces champs de formulaire. Nous avons quelques champs de formulaire ici que nous devons réellement définir. Revenons donc ici et créons une nouvelle classe pour nos champs de formulaire. Maintenant, nous avons déjà travaillé avec une partie de cela, donc cela va sembler un peu familier, mais ça pourrait aussi se sentir un peu magique. Donc, ce champ de formulaire va hériter du champ de formulaire abstrait. Et ici, ça va sembler assez bizarre, mais ça va être Page est égale à la clé parentale. Cela va aller à la page de contact qui correspond à la classe. Le nom lors de la suppression est égal aux modèles point Cascade. Donc, nous allons supprimer chacun de ces champs de formulaire lorsque les pages de contact ont été supprimées et le nom associé . Il s'agit des champs de formulaire importants. Et la raison pour laquelle c'est important est parce que ce nom associé correspond au panneau en ligne. Très bien, en regardant un terminal, nous allons devoir faire face à beaucoup d'importations différentes ici. Donc, je vais essayer de secouer certaines de ces choses du haut de ma tête en se basant sur ce qu'on voit sur la page. Nous avons donc besoin d'un champ de formulaire abstrait ici. Je crois que cela vient du même endroit que le formulaire de courriel abstrait fait. Importons un tas de nos panneaux. Maintenant, faisons à partir de wag queue point Admin Dodd qu'il les gestionnaires importe. Nous avons un panneau de champ en cours d'utilisation. Ah, nous n'avons pas dans le panneau de ligne utilisé dans le panneau de ligne et je pense que nous seulement Penhall pas douleur. Euh, et je pense que le seul autre que nous ayons oui, c'est un panneau de sélection d'images. Mais ça vient d'ailleurs. On va dire comment les images parsèment dessus. Les gestionnaires importent le panneau Sélecteur d'image. On a besoin de la clé parentale. Celui-ci provient de la grappe de modèles de modèles de points de cluster de modèles importer la clé parentale. Qu' est-ce qu'on a d'autre ? Nous avons un champ de texte enrichi. C' est un nouveau pour nous de Attendez jusqu'aux champs de points de base. Celui-ci est vraiment cet air qui commence vraiment à étirer ma mémoire ici. Je pense que c'est champs champ texte riche ? Ouais, je pense que ses champs et je pense que ça pourrait être ça ressemble à ça. Ok, alors allons-y. Annuler ou serveur. Maintenant que cela fonctionne Nous allons faire python gérer dot pie Faire des migrations jusqu'à ce que nous ayons un nouveau modèle pour un champ de formulaire et un nouveau modèle pour notre page de contact. Faisons en sorte que Python géré je migre et nous allons réexécuter son serveur sur le port 8000. Maintenant, allons à notre page est ici. Essayons de créer une page de contact. Nous avons une page d'accueil ici à une page enfant, et cela nous permet toujours seulement de faire la page flexible. C' est parce que sur sa page d'accueil, il a permis l'un des deux types de pages. Nous avons couvert ce Ah, il y a quelques leçons, mais la page de liste des services et la page Flex sont la sous-page Onley ou les pages enfants qui sont autorisées à vivre sous la page d'accueil. Donc, il essaie de créer une page flexible car la page de liste de services a un nombre maximum d' un et elle existe déjà. Donc, la seule autre option est une page flexible. On peut album dire, Hey, ajouter cette page de contact, donc je vais y retourner et ensuite sur une page enfant, et on y va. Nous avons une nouvelle option, une nouvelle page de contact, et nous pouvons voir que cela ressemble beaucoup à une page normale. Donc on va appeler ça nous contacter. Je veux changer cette limace pour être juste contact slash parce que j'aime qu'une intro va être Bonjour. Bienvenue dans mon texte d'introduction ou quelque chose comme ça. J' ennuie mon image de carte. Je n'en ai pas, mais je vais utiliser une image régulière ici. Une carte ? Toi où ? L va juste aller à http maps dot google dot com Et maintenant nous avons formé le champ, donc c'est vraiment cool. Maintenant, nous pouvons créer notre propre formulaire personnalisé. Maintenant, une chose à garder à l'esprit est que cela ne remplace pas Django Fields. Il s'agit d'un formulaire de contact. Il n'est pas destiné à être utilisé pour ajouter toutes sortes de logiques supplémentaires. Donc, si quelqu'un remplit ce formulaire, il ne devrait pas créer automatiquement une nouvelle page de queue de wag. C' est plus ou moins pour le système de formulaires Django. Pas pour les formes de queue de wag. Du moins pas pour la page de contact de toute façon. Ah, on a un message d'aide sur les étiquettes. Le champ est-il requis ? Nous avons différents types de champs ici. Un tas d'entre eux. Nous allons apprendre à les limiter dans la prochaine leçon. Je crois que les choix et une valeur par défaut. Allons-y et ajoutez-en quelques uns ici. Alors ajoutons votre nom complet. Et cela va être une seule ligne de texte et c'est nécessaire. Ajoutons un autre dans l'année. Celui-ci va être votre adresse e-mail. Ce sera un champ de courrier électronique. C' est aussi nécessaire. Et ajoutons un autre message ici appelé message. Et celui-ci va être un texte à plusieurs lignes. Merci, le Texas va l'être. Merci. Merci. Merci. Merci. Merci. Merci. L' adresse e-mail de départ. Qui envoie cet e-mail maintenant ? Une chose à garder à l'esprit est que lorsque vous lancez un site de queue de wag, votre calcite blanche ne va pas envoyer d'e-mails par défaut. Vous allez avoir besoin de configurer SMTP ou d'utiliser un service comme le cachet postal, qui je pense que le site Web est postmark app dot com ou quelque chose comme send grid ou ah, aws a un service appelé SCS. Quelque chose comme ça. Donc, 1/3 service de partie pour envoyer des e-mails, c'est généralement le moyen le plus simple. Donc, l'adresse de ici va être Caleb à apprendre façon, dire dot com. L' adresse à va également être Caleb à Learn wag queue dot com. C' est nous allons envoyer l'e-mail à. Donc, en gros, ça va sembler que je m'envoie un e-mail. Mais c'est parfois ainsi que fonctionnent les formulaires de contact. Ou je pourrais envoyer un e-mail à quelqu'un d'autre et il semble que cela vient de mon adresse e-mail indépendamment. Et le sujet sera la soumission du formulaire de contact parce que je ne me sens pas créatif avec ce nom. Ah, vous remarquerez aussi avant qu'on sauve. Nous pouvons prévisualiser cette page ou prévisualiser la page de destination. Nous y arriverons dans un petit peu aussi. Des haricots frais. Cette page a été enregistrée. Et si nous regardons en direct, nous allons voir Oui, bien sûr, Template n'existe pas. Nous savions que ça arriverait. Nous n'avons pas créé de page de contact. Nous devons créer ce modèle maintenant, donc je vais aller dans les modèles Rocketman et créer une nouvelle section ici appelée Contact and Contact page dot h e mails. Ce qu'il va être appelé ceci va s'étendre en fonction du HTML, tout comme toutes nos autres pages qui vont se charger. De quel genre de trucs allons-nous avoir besoin ? Eh bien, on ne sait pas encore. Donc, je vais réellement le commenter, en fait, fait, il suffit de le supprimer. Ramenons ça. Ah, Block. Créons un nouveau bloc pour le contenu. Et juste pour s'assurer que cela fonctionne bientôt H un salut de contact Page. Je ne me dérange pas vraiment qu'il ya un petit type de quand leur cause nous jetons haut de page de contact. Maintenant, nous savons que nous avons du texte riche ici parce que si nous allons à notre puits, fermons la page d'accueil 1. Mais si nous allons à notre page de contact nope, ce code source, nous allons à notre page de contact. Nous avons un champ de texte enrichi, donc nous savons que nous allons devoir l'afficher. Alors chargeons les balises de base Waittil et le champ va être intro. Donc, nous allons simplement afficher qui fera la page qui intro et jeter le filtre de texte riche sur elle. Bonjour. Bienvenue dans le texte d'introduction. C' est ce que j'ai mis dans la page. Maintenant ce que je vais faire, c'est parce qu'il y a un tas de html sur cette page et je ne pense pas que vous êtes intéressé à juste me regarder taper html sur Emmett former son bras comme tive, Quoi que ce soit. Je vais écrire sur mon code. Je suis dans un noir de l'écran et reviens quand j'aurai fini et on remplira toutes les pièces manquantes ensemble. Bon, donc j'ai juste écrit un tas de HTML et on va remplir les morceaux manquants ensemble . Donc, ce que ce modèle va maintenant ressembler, c'est qu'il y a un titre, texte d'introduction dont nous avons besoin d'une image peut être un lien vers une carte, vous ero, et nous avons besoin de notre formulaire pour réellement apparaître et rendre correctement et soumettre. Donc, la première partie assez facile. Nous l'avons fait avant le titre du point de page et notre texte enrichi. On a littéralement fait ça il y a quelques instants. On pourrait faire du texte riche en texte d'intro point, et c'est le filtre de texte riche qui vient des balises Attendre jusqu'à la cour. Suivant. Nous avons une image ici, et cette image va être 5 80 par 3 35 Allons de l'avant et utilisez la balise image. Et si cette balise d'image ne fonctionne pas pour vous, c'est parce que vous devez charger des balises d'images de queue wag. Donc, nous allons charger la page. Comment on a appelé cette image ? On l'appelait « Image de carte ». Nous allons dire, Sentez ça avec 580 par 3 35 comme je m G. Allons de l'avant et remplacons cette valeur ici. Je suis g dot u r l. Nous avons déjà fait ce nombre de fois. Toujours ajouter le sel et jetons un oeil à ce que sa page ressemble actuellement. Très bien, regarde ça. Ça commence à se réunir assez bien maintenant. Nous devons ajouter notre formulaire. Il y a beaucoup de façons différentes de le faire. La façon dont j'aime le faire est une sorte de boucle à travers toute la forme. Les champs un par un identifient ce qu'ils sont et stylisent ma page différemment en fonction ce qu'est le champ. Ainsi, par exemple, si je fais une boucle dans tous mes champs de formulaire et que j'ai une zone de texte, je souhaiterais peut-être ajouter quelque chose de différent par rapport à un champ de saisie normal. Mais comme un raccourci pour l'instant, nous pouvons faire point de forme que vous l Ce que j'ai ici aussi est une méthode de formulaire est égale à poster l' action est la page où l Il est juste cette page qui va se soumettre sur elle-même. Toujours, toujours, toujours. Ajoutez votre jeton CS R F. Il s'agit de votre demande intersite. Jeton de contrefaçon. Cela signifie que vous êtes qui vous êtes, et que quelqu'un n'essaie pas de faire semblant d'être quelqu'un d'autre. Cela n'empêchera pas les mégots de soumettre ce formulaire de contact, mais cela empêchera certaines personnes malveillantes. Et puis nous allons dire point de forme comme vous. Eh bien, juste une sorte d'imprimer le formulaire entier sous la forme d'une liste, et je crois que ça ne va pas créer une liste pour nous. Nous devons donc ajouter UL autour d'elle. Ok, allons-y et rafraîchissons. Regarde ça. Votre nom complet, votre email et votre message. C' est ce que nous avons écrit. C' est ce que nous avons ajouté sur sa page. Donc, quand nous éditons notre page de contact, descendez à son formulaire, champs votre nom complet, nous avons un email ici et nous avons un message qui est un champ de texte. Et bien sûr, tous ces spectacles comme prévu dans la prochaine vidéo, nous allons continuer avec ça. Nous allons rendre ce look un peu plus agréable, et lorsque vous soumettez votre page, il va y avoir une page de destination actuellement n'existe pas, donc nous allons l'ajouter également. 35. Formulaires de contact partie 2: en partant de la dernière leçon. Nous avons créé une page de contact, et nous travaillons à rendre ce formulaire un peu plus agréable. Et puis quand nous éditons la page, nous voulons aussi cette boutique de page de destination, ce qui n'est pas le cas actuellement. Nous lui avons donné un modèle qui n'existe pas, donc nous allons devoir nous assurer que cela fonctionne également. J' aime donc faire une sorte de boucle à travers tous ces domaines et c'est une tâche très laborieuse. Donc, vous pouvez simplement pimenter cela en utilisant juste CSS, qui est je pense que c'est la façon recommandée de le faire. Mais j'aime aussi une sorte d'épices un peu plus en utilisant un outil appelé Widget Tweaks. Donc je vais aller à mon serveur ici, frapper, annuler et faire Pip installer Django Widget. Épelez bien, ce qu'il peaufinera. Et cette insulte version 1.4 point cinq. Allons-y. Exécutez à nouveau mon serveur. Vous pouvez exécuter votre serveur, certainement exécuter votre serveur et nous allons de l'avant et ajouter ceci à nos exigences. Donc, nous avons des extensions Django ici parce que nous installons des extensions Django dans ah classe précédente . Si vous n'avez pas ajouté cela à partir de la classe précédente. Assurez-vous certainement que vous avez cela, parce que vous l'utilisez sur ce projet et nous allons ajouter à Django Widget Tweaks version 1.4 point cinq. Et si vous n'êtes jamais certain de quelle version vous utilisez, vous pouvez toujours faire Pip Show, puis taper le nom du paquet. Donc Django Widget tweaks et cela me dira que c'est la personne qui a fait de cette adresse e-mail . C' est le nom de la personne et la version est 1.4 point 5. Enregistrez ce fichier, fermez-le, et allons de l'avant et installons des semaines de widget dans notre application. Je vais jeter ça en bas parce que c'est 1/3 partie. Donc, les réglages du widget et vérifions notre terminal. Assurez-vous que rien ne se plaint. n'y a pas de plaintes. Ça a l'air bien. Et maintenant ce que je vais à Dio, c'est que j'ai déjà pré-écrit cette leçon particulière juste parce qu'il y a beaucoup à elle. Et si nous restons ici ensemble à parler de pouvoir parcourir chaque champ de formulaire et obtenir toutes les différentes valeurs que nous allons, nous allons rester coincés sur cette leçon pendant plusieurs heures, et je ne veux pas que tu t'ennuies de mort et avoir à être ici coincé avec moi pendant plusieurs heures. Donc, ce que je vais à Dio est coller dans mon code et nous allons le parcourir ligne par ligne. Ok, donc je viens de coller un tas de code ici avant de faire quoi que ce soit, nous devons nous assurer que les réglages de widget sont autorisés, ce qui va être le fichier que nous allons charger dans ce modèle. Et allons de l'avant et donnons une petite vérification à cette page. Voir ce qui s'est passé ici, Ok, il manque un rafraîchissement de ma page. Et tout ce qui était, c'était que je manquais une fin si je ne t'ai pas fait regarder ça parce que ça m'a pris environ cinq minutes. Trouvez-le en fait dans ce gâchis de code s. Donc, c'est un bon candidat pour diviser votre code en différents fichiers include. Mais ce que j'ai fait ici, c'est que j'ai ajouté des semaines de widget. Donc, nous avons pip installé widget semaines, Jenga widget semaines et ah, nous devons maintenant ajouter notre formulaire ici. Donc, notre formulaire va dire pour chaque champ du formulaire, créer une nouvelle ligne et ils allaient dire si ce type de widget de champ est une zone de texte, montrer quelques choses de zone de texte. Donc, dans la zone de texte, nous avons un groupe de formulaire et nous avons une étiquette dans votre Donc, cela fait le champ point i D pour l'étiquette, puis l'étiquette réelle elle-même. Et nous allons dire si c'est nécessaire, jetez entre parenthèses le mot requis. Ensuite, nous allons utiliser des semaines de widget, rendre la balise de modèle de champ va rendre le champ particulier lui-même. Quelles que soient les classes qu'il décide qu'il a besoin, il va l'ajouter là-dedans. Nous allons également ajouter le contrôle de formulaire et des rangées de six, et le détenteur de place va être quelle que soit l'étiquette de champ est maintenant, C'est encore une façon très, très manuelle de le faire. Mais cela me permet d'ajouter des choses comme des lignes de six ou un contrôle de formulaire de classe afin qu'il corresponde avec des bottes ternes. Vous pouvez faire tout cela avec CSS aussi, sorte que vous n'avez pas vraiment à entrer dans le minutieux. Si vous pouvez simplement le faire de la manière CSS et remplacer l'un de vos styles. C' est certainement plus facile, mais c'est le moyen le plus manuel. Si jamais vous êtes intéressé à le faire, s'il y a des erreurs de champ pour ce champ particulier, nous allons montrer un petit texte et nous allons parcourir chacune des erreurs de champ , puis montrer chaque air de champ avec un saut de ligne après. Et puis, s'il y a un texte d'aide ici. Nous allons également montrer la taxe d'aide sur les points de champ. On va s'assurer que c'est sûr pour que tu puisses mettre de l'audace ici ou un Tallix là-dedans quelque chose comme ça. Ensuite, nous disons, Si le type de champ est à peu près n'importe quel autre type de champ et que l'étiquette de champ n'est pas vide, nous allons vraiment faire presque exactement la même chose. Mais nous allons lire sur le champ avec une classe de contrôle de formulaire, ce que nous faisions auparavant, mais celui-ci n'a pas six lignes. Cela n'a, bien qu'une rangée parce que ce sera un champ d'entrée d'une certaine variété et en faisant exactement la même chose encore et encore. Maintenant, La raison pour laquelle je vérifie l'étiquette de champ et pour voir s'il existe ou non est parce que si nous avons déjà ajouté Google à cela, nous allons avoir besoin de détecter en quelque sorte cela, et c'est une façon de le détecter. Donc encore une fois, je ne vais pas passer en revue tout ça en profondeur. Mais c'est le moyen très manuel. Donc à l'avenir, si jamais vous aimez oh, hey, hey, j'ai besoin de Teoh, boucle à travers toutes les erreurs de champ ou boucle à travers tous les champs et puis boucle à travers tous ces airs. Ouais, n' hésitez pas à voler un peu de ce code ici parce que, hé, j'ai déjà fait le travail. Pas besoin pour nous deux de le faire. Donc, quand nous retournons à une page et nous donnons un peu de rafraîchissement ici, nous pouvons voir que vous êtes le nom complet. Il est nécessaire que votre email soit requis et votre message est requis. Maintenant, si je sens ça dehors, mon nom complet sera Caleb et mon email complet va être tué sur appris. Attendez le point com. J' ai une alarme. Si un message ici, je vais juste le soumettre maintenant. Maintenant, pendant que ça se soumet, il va y avoir deux choses qui vont se passer. C' était le 1er 1 il va nous emmener à notre page de destination de contact, mais notre vous où je n'ai pas changé, c'est juste utiliser un modèle différent maintenant. Et l'autre chose est, si nous regardons dans notre terminal, nous pouvons effectivement voir qui est d'essayer d'envoyer un e-mail, Son dit. Mon nom complet est Caleb. L' adresse e-mail que j'ai remplie dans le formulaire était Caleb. Il a appris attendre jusqu'à point com et le message était de 50 mots d'ipsum chaud. C' est exactement ce que j'ai soumis. Maintenant, c'est plutôt sympa. Mais aussi, quand nous retournerons à notre annonce de wag tail, les hommes attendent juste qu'elle se charge. Nous avons maintenant une petite section dans vos formulaires appelés, et ce qui est vraiment agréable à ce sujet, c'est que chaque fois que quelqu'un soumet votre formulaire sur la page de contact US , vous obtiendrez la date de soumission et les différents champs ici. Vous pouvez également sélectionner tous ces éléments. Vous pouvez les télécharger dans un C S V, même supprimer vos messages sélectionnés, et vous pouvez les filtrer à travers eux. Donc maintenant vous avez un endroit pour stocker les soumissions par email parce que, hé, vous savez quoi ? Parfois, les e-mails se perdent sur Internet. C' est juste un fait de la vie. Cela arrive de temps en temps. Et si cela arrive, vous avez un e-mail de sauvegarde ici et dans le futur. Si vous avez ajouté un autre formulaire de contact, nous ne le ferons pas sur ce projet car nous avons un nombre maximum d'un sur cette page. Mais si vous avez déjà ajouté un deuxième contact pour nous contacter au sujet de nos services, ce titre ici serait juste en dessous. Il y aurait une deuxième rangée, disait-on, contactez-nous les services électoraux parce que je serais le titre de la page et encore une page de contact. Et quels que soient vos champs de formulaire, cette page particulière serait affichée ici. Maintenant, nous avons encore une chose à faire. Nous devons ajouter cette page de contact prêt. Donc, ce que je vais faire est de l'avoir fait Ah, cette page de contact, je vais vraiment juste sauver cela car la page de contact Landing le titre n'a pas besoin changer, mais je peux me débarrasser de beaucoup de ces trucs ici. Et je ne pense pas avoir besoin de tout ça. Et je n'ai certainement pas besoin du formulaire parce qu'on se contentait de dire merci. Et maintenant, cette page, au lieu de dire que l'intro va devoir dire pour vous remercier. Texte à la page qui. Merci. Textez ce texte enrichi. On n'a pas besoin de nos images. Nous n'avons pas besoin de tweets de widget là-dedans, mais nous avons besoin de nos balises de base pour le filtre de texte enrichi. OK, allons-y. Sauve ça. Donnez-lui un rafraîchissement. Non, je ne veux pas le renvoyer. Donc je ne vais pas me rafraîchir. Mais ce que je vais faire, c'est aller à cette page de contact et juste en prévisualiser. Aperçu de la page de destination Dans le vrai, il est dit, contactez-nous. Merci. Merci. Merci. Merci. Merci. Ou, tu sais, peu importe. Une sorte de texte de remerciement que vous aimeriez y mettre. Probablement quelque chose d'un peu plus approprié que merci. Merci. Merci. Merci. Merci. Et c'est le long chemin. L' explication longue sur la façon de créer une page de contact avec ma queue. Maintenant, pour être totalement honnête avec toi, je n'écris pas ça à chaque fois. J' ai mon code source disponible ici et aussi sur obtenir moyeu dot com slash revêtement pour tout le monde slash appris tableau de bord, wag tail. Et vous pouvez littéralement copier ce code. Je ne pense pas que trop de gens écrivent en fait tous les trucs du formulaire de contact manuellement. Si tu l'es. Salut, bravo. Mais c'est juste un peu trop de travail pour moi. Donc, je vais généralement copier et coller la route et juste changer ce que j'ai besoin de changer ici. Donc, une fois que vous avez cela en cours d'exécution, n'hésitez pas à l'expérimenter. Essayez de le casser si vous voulez pire scénario, vous supprimez simplement cette application. Exécutez des migrations, recrée l'application, réexécutez les migrations et démarrez un nouveau ou au lieu d'expérimenter. Si vous êtes complètement fatigué des formulaires de contact comme moi, passons à la leçon suivante et apprenons encore une chose sur les formulaires de contact, et ensuite nous en avons fini. 36. Limiter les choix du formulaire de contact: d' accord. Il n'y a qu'une leçon de plus sur les formulaires de contact ici, et c'est un sujet assez courant. Au moins, je reçois cette question assez souvent et elle se pose dans beaucoup de questions des clients, en fait, est comment puis-je limiter ces maintenant lorsque vous travaillez avec un design professionnel ? Alors peut-être qu'un designer a fait un design pour vous ? Les chances sont qu'ils n'ont pas pensé à ce champ Ah date heure un bouton radio date, plusieurs cases à cocher déroulantes de sélection. Jack, tu es numéro L, email. Les textes multiples et simples mensonges sont tous censés ressembler à des chances, disent-ils. Voici un texte à une seule ligne, un texte plusieurs lignes. Voilà Ah, cocher, peut-être une liste déroulante. Nous devons donc limiter certains d'entre eux parce que nous ne les utiliserons pas tous . Mais comment faire ça maintenant, en attendant que ce n'est pas vraiment si difficile à faire, mais ce n'est pas une fonctionnalité super facile à comprendre non plus. Donc, dans mon code, je suis ici dans le modèle de slash de contact Stop I. J'ai un champ de formulaire ici appelé un champ de formulaire abstrait. Maintenant, je suis en fait des changements à personnalisé au champ de formulaire abstrait, et je vais créer une nouvelle classe appelée Champ de formulaire abstrait personnalisé. Et celui-ci va juste être un champ de formulaire abstrait lui-même. Donc, vraiment, nous avons juste déplacé la classe en quelque sorte. Nous allons dire que celui-ci a un type de champ de champ HR et parce que dans Django vous n' avez pas de champ de choix, vous avez un champ char et vous pouvez le donner à des choix. Nous allons simplement vous dire, c' est un champ de graphique avec des choix. Donnez-nous un nom détaillé pour la plupart des noms est égal au type de champ. La longueur maximale va être quelque part autour de 16 caractères, et les choix seront des choix de champs de formulaire. Et pour celui-là, retouchons simplement ça et disons la classe, et aussi déplacer ça et agrandissons ça. La classe meta va être une classe abstraite. C' est vrai ordre de tri. Ok, donc il nous manque encore une chose ici. On manque juste les choix de champs de formulaire. Je peux vous donner les choix de champ de formulaire, ou nous pouvons faire un clic droit sur votre aller à la définition et c'est vraiment juste explorer le code source d'attente et nous pouvons voir ici. On a un type de champ. Regarde ça. Champ de formulaire abstrait. On a un type de champ. C' est le seul que nous dominons. Nous avons également formé des choix sur le terrain. Nous avons aussi des panneaux et des trucs. Si jamais nous voulions ajouter des champs personnalisés, nous pourrions totalement le faire. C' est plutôt sympa. On n'y va pas. Nous voulons juste savoir ce que ce formulaire, choix de terrain, ce qu'ils sont. Allons à cette définition. Et nous avons tous ces choix de champs de formulaire. Donc je vais prendre toutes ces copies, euh, euh, et les coller dans mon dossier et pour qu'on puisse voir qu'on a un numéro d'e-mail à ligne unique et à plusieurs lignes. Tu es sorti. cocher cases, liste déroulante, sélection multiple date radio jour et masquée. Allons-y et débarrassons-nous de ceux que nous n'utiliserons pas sur ce site. Maintenant. Cela peut être différent sur votre site Web, mais sur ce site particulier que j'ai fait, je n'ai pas besoin de champs de date. Je n'ai pas besoin de radio. Je n'ai pas besoin de menu déroulant multi sélection. Peut-être, mais non. Ne cochez pas les cases. Peut-être toi, Earl. Ah, champ numéro. Je n'ai pas besoin d'un numéro. J' ai vraiment besoin d'une seule ligne, multi-ligne email et vous êtes tous et c'est pour traduire votre texte. Et si nous revenons à cette page régulière, nous pouvons voir qu'elle est importée ici. Donc je vais prendre cette importation et importé dans ma page aussi. Donc, à partir de django dot, vous dites que l'importation de traduction, vous obtenez du texte paresseux comme trait de soulignement. OK, allons-y et sauvegardons ça. Et le nom de v Bo n'est pas une chose. C' est pour ça qu'on vérifie son terminal. C' est un nom détaillé pour réexécuter son serveur. Ok, ça a l'air bien. Allons-y et courons. Python a géré. Je fais des migrations car il est toujours bon de vérifier si vous avez des migrations. Et bien sûr, nous avons modifié le type de champ ici. Python a géré une tarte, migrer et relancer son serveur. Et maintenant, lorsque nous actualisons notre page, au lieu de tous ces choix, nous allons avoir les choix réguliers que nous avons définis. Nous avons pris tous les choix que cette jambe nous donnera et nous avons dit non, limitons cela à seulement quatre types différents. Rien dans son temple ne changera parce que nous utilisons déjà ces quatre. Et chaque fois que vous ajoutez un nouveau champ ici, ce nouveau type de champ sera également une ligne simple, e-mail multi-ligne ou un champ U R L. Et c'est ça. C' est ainsi que nous limitons les choix de champs de formulaire. 37. Support image .webp: Wempe est un type d'image que Google pousse depuis quelques années maintenant. C' est apparemment un format d'image haute compression sans perte. Maintenant, le fait est, il n'est pas supporté par tous les navigateurs du monde, pas comme le J. Peg standard ou un fichier PNG, mais je suis sûr que le sport finira par y arriver. La bonne chose, c'est attendre jusqu'à 2.7 et de l'avant. Il prend en charge les images Web P hors de la boîte, alors allons-y. Ouvrons un champ de flux. Allons aux modèles flexibles. Nous avons une grande image ici, et nous allons modifier ce modèle maintenant pour créer une image Web P est super, super facile. Vraiment. Tout ce que vous avez à faire est après année, vos dimensions d'image que vous voulez recadrer deux ou remplir, aussi. Vous venez vraiment de mettre le format dash Webby. C' est ça. Et il va créer une image Web P pour vous. Il le signera à la variable d'image, donc vous n'avez pas vraiment besoin de changer quoi que ce soit d'autre maintenant. Je ne vais pas faire ça. Je suis en fait copier cela et au formatage quand P comme image Wempe et nous allons regarder ce u R L Donc allé l'image dodgy. Eh bien, maintenant je sais juste que la page à propos de nous a déjà une image dessus. Donc je vais rafraîchir cette page et nous pouvons voir qu'elle a produit un Web p U R L pour nous, et je vais aller à l'hôte local 8000. Et c'est là. Voici notre image Web P. Il semble, honnêtement, exactement le même que notre image JPEG régulière. Maintenant, lorsque vous utilisez votre Web, l'image en général, je crois que nous les mettons à l'intérieur de la balise image et vous ajoutez une source. Donc tu as une source ici. Le jeu de sources est égal à, puis vous faites votre image Web P. C' est le mauvais avec l'image que vous êtes. La bande L est égale à la barre oblique d'image Web P, et c'est tout. Donc, maintenant, nous avons une étiquette image essayant d'utiliser le Web P et retombe sur une image normale. Maintenant, comme une expérience, je vais voir le code source ici, et je peux voir qu'il y a ah, image Web P et il y a aussi une image JPEG. Je vais donc télécharger ces fichiers. Bon, donc je viens de télécharger ces fichiers, et on peut voir ici. L' un est le format Web P, et l'autre est juste un gabarit J normal. Le Web P est plus de 50 % plus petit que le JPEG. Nos images Web P ne représentent que 32 kilo-octets, et le format J est de 81 kilo-octets. Les deux sont assez petites images, indépendamment, mais néanmoins il est encore significativement plus petit. Il y a donc des gains de performance assez importants, en particulier avec les sites Web basés sur des images lourdes. Et comme un résumé rapide, Vraiment, tout ce que vous avez à faire est d'ajouter le format de tiret Web P derrière vos dimensions d'image, et c'est tout. Donc, pour le reste de ce projet, vous pouvez passer par tous les autres codes source et y ajouter également Web P. 38. Autres façons d'apprendre Wagtail: Parlons de quelques astuces pour apprendre Wag Tail très vite. Donc, vous avez suivi tout ce cours et un excellent travail pour passer à travers tout ce cours, d'ailleurs, parce qu'il y a beaucoup de contenu à passer. Mais il y a un moyen plus rapide. C' est la façon dont j'ai appris. Et c'est comme ça que beaucoup d'autres personnes que j'ai entendues ont réussi à apprendre le wag, queue et le jangle très, très rapidement. Alors les premières choses d'abord. Vous avez les docks, les docks, vous savez que les chiens sont assez bons, mais comme n'importe quelle documentation, ça va vraiment vous mener jusqu'ici. Jusqu' à ce que vous éprouvez réellement une partie du code, vous n'allez pas vraiment en mémoriser beaucoup. Et comme ce cours, il n'y a que tellement de contenu que des gens comme moi peuvent générer de l'aide aux orteils. Tu apprends vraiment n'importe quoi. Maintenant, la façon dont j'ai appris le moyen était de plonger dans le code source, et vous pouvez le faire avec votre éditeur. Mais je viens de le télécharger directement depuis Get Hub. Je clone juste le repo et, par exemple, je suis allé à bloquer ce tarte et j'ai juste un clic droit, aller à la définition ou aller trouver le code juste à l'intérieur du dépôt get hub. Et puis j'irais voir ce que tous ces air constituaient de son bloc. Alors qu'est-ce qu'un bloc ? Et puis je vais ici et puis je lisais le code. Et si je ne savais pas ce qu'est le cul médical, j'irais vite. Donnez ça Ah, petit Google. Pour la plupart, tout est très, très petit et modulaire et facile à apprendre. Mais comme un bloc, chaque bloc a un nom. Chaque bloc a un compteur de création. Eh bien, c'est intéressant. Il est livré avec une classe par défaut sans étiquette. L' icône par défaut de chaque bloc pour chaque bloc frappé est un espace réservé a un nom de classe. On n'a même pas regardé le nom de la classe. Nous n'avons même pas regardé le groupe non plus. Donc, ce sont deux choses que vous pouvez ajouter à chaque bloc frappé. Maintenant, ça pourrait être un peu exagéré ici, alors passons à un exemple plus simple. Allons à la page d'accueil et je vais juste regarder la page elle-même. Le cours de la page, c'est dans ma fusée, mec. ven de python en direct 3.7. Comme les paquets Wag Tail core models dot Pie et la classe de page, je peux voir que la classe de page est composée d'un index de points d'index de page abstraite et d'un modèle à base de plantes de cluster . Je peux aussi voir que chaque page a un titre. Titre brouillon, type de contenu slug, qui est une clé étrangère d'un contenu. Un statut en direct a des modifications non publiées. Un chemin UL, titre du PDG d' un propriétaire montrant les menus par défaut montrant la description de la recherche Manu Toutes ces choses et cela continue et encore et encore. Et puis nous pouvons voir tous les champs de recherche par défaut afin que nous puissions à nos propres champs de recherche si nous voulions. Ce n'est pas vraiment une chose que nous avons plongé dans Ah, dans ce cours. Mais ils sont là. Champ de recherche, sorte que vous pouvez toujours ajouter vos propres champs à cette liste de champs de recherche. Nombre max. On a parlé du nombre maximum. Nous avons très légèrement parlé de Max Count par parent. Voici les panneaux, panneaux de contenu, les panneaux de promotion et les panneaux de paramètres par défaut. Il n'y a rien là-dedans. Ensuite, il y a le dedans. Eh bien, qu'est-ce que cela fait réellement pour que c'est un vraiment, vraiment bon moyen d'apprendre comment dire fonctionne maintenant. D' accord, il y a beaucoup de manteau. Wag Tail est activement développé depuis plusieurs années maintenant, donc il y a beaucoup de code à passer, et ce n'est pas pour tout le monde. D' autres personnes aiment expérimenter, comme moi. J' aime expérimenter. J' aime entrer dans le code et voir ce qui est disponible au lieu de simplement regarder le code source tout le temps. Vous en tant que code source de lecture est utile. Mais encore une fois, je ne me salis pas les mains, et je ne vois pas toujours dans mon esprit ce que les choses font. Donc, ce que j'aime faire est géré par Python I shell Plus. Maintenant, cela est livré avec un paquet différent, donc cela ne vient pas avec shell régulier. Donc Django vient toujours avec Shell pour que nous puissions voir un shell régulier ici, et c'est, vous savez, assez ennuyeux. Mais Shell plus est une chose différente qui vient avec un paquet différent. Alors installons rapidement. Cette heure va rapidement chercher Django installer Shell Plus, et qui vient avec les extensions Django, et tout ce que nous avons à faire est d'exécuter cette commande votre Pip, installer les extensions Django puis dans mon projet parce qu'il est basé sur jangle. Nous allons vouloir exécuter ou ajouter plutôt, extensions de soulignement Django. Ouvrons notre terminal. Je viens de l'effacer. Nous allons courir shell, plus une fois de plus et nous y voilà. On est dans Shell Plus maintenant. La différence est que vous voyez tous les éléments d'écran qui sont automatiquement chargés ici pour vous ,de sorte que vous , n'avez pas à vous inquiéter, comme l'importation de pages de queue de wag ou de sites ou de balises ou quoi que ce soit. C' est juste à votre disposition. Ainsi, par exemple, nous pouvons obtenir chaque attente jusqu'à la page en tapant les objets point de page tous, et cela nous donne un ensemble de requêtes. On peut voir. C' est un pli de page de toutes les différentes pages, y compris notre itinéraire. Mais allons-y et obtenons notre page d'accueil. Donc page Accueil Variable Accueil est égal à la page d'accueil objets point point d'abord, nous avons seulement une page, donc nous allons juste obtenir le 1er 1 et nous avons une page d'accueil dans votre alors je fais point de page d'accueil et je touche Tab en fonction de votre fonctionnement ou vous êtes en terminale pourrait avoir à frapper onglet deux fois. Mais regardez toutes ces différentes options, et c'est ainsi que j'ai aimé apprendre ce que tout fait. Donc, le point de la maison n'existe pas. Ce que nous savons qui vient de Django maison dot body. Ce sont nos champs de cours d'eau. Donc on peut y aller maintenant. À quoi ressemblent les champs de flux ? Regarde ce point à la maison. Qu'est-ce que son corps nous donnerait d'autre ? Count Index Rod texte est paresseux champ Stream, flux enfant, bloc flux de données flux rendu en bloc. On a toutes sortes de choses ici. Comptons et ce n'est pas une méthode, accord, nous avons lu le compte. Est-ce que ça vient avec n'importe quoi d'autre est livré avec toutes sortes de choses. Donc maintenant, nous pouvons vraiment commencer à entrer dans ce domaine. C' était un mauvais exemple actif parce que c'était un peu trop complexe, mais nous pouvons voir la page d'accueil I d est trois le point d'accueil en direct. C' est vrai. La page d'accueil est en ligne. Qu' est-ce que la limace de la page d'accueil ? C' est juste à la maison et vous pouvez trouver d'autres choses ici qui sont vraiment, vraiment utiles aussi. Donc, toutes les choses que nous avons vu dans le code source, tout est ici montrant les menus montrant les menus par défaut slug. On a déjà regardé ces trucs. Nous pouvons obtenir l'UL complet. On peut avoir le texte principal. C' est un champ personnalisé. Nous pouvons obtenir le U R L The Oural Path, le i D. Nous pouvons exécuter n'importe laquelle de ses méthodes, comme obtenir des contacts. Nous pourrions essayer d'exécuter certaines de ces méthodes, bien que nous puissions avoir besoin de se moquer de certaines données supplémentaires, surtout si vous essayez d'exécuter un test sur une page. On peut voir si les pages sont verrouillées. On peut essayer de le déplacer. On peut voir le propriétaire du propriétaire. On peut voir toutes sortes de choses ici. Donc, si vous êtes vraiment intéressé par ce qui sort de la boîte avec Wag Tail, honnêtement, il suffit de faire tourner shell, plus installer les extensions Django, installer shell plus et juste bricoler autour. Nous pouvons également faire des choses comme obtenir nos articles de menu. Alors faisons le menu est égal aux hommes. Vous pointez des objets tous savent que nous n'avons qu'un seul menu. Faisons le 1er 1 Donc on a un menu. Nous savons que c'est notre soulignement. Strait de soulignement de la chaîne de soulignement. C' est le titre que nous pouvons maintenant faire le point de menu et nous voyons toutes sortes de choses ici. Mais celui que nous avons ajouté était des éléments de menu avec vos éléments de soulignement de menu pointent tous et c'est un ensemble de requêtes. Nous pouvons regarder nos témoignages. Témoignages va être Let's do t est égal à des témoignages. Et je viens de faire l'onglet pour Auto complete. Nous avons deux témoignages ici. Un Biota, un de Chewbacca. T un est égal au 1er 1 C'est notre premier témoignage. Qu' est-ce qu'on a ici ? On a un devis. Quelles sont les citations régulières juste pour citer du texte, faire ou ne pas ? n'y a pas d'essai et l'attribution vient de Yoda. Donc, maintenant, nous pouvons voir ce que nos données nous présentent réellement, et cela est vraiment, vraiment utile lorsque vous dirigez des choses comme dans nos modèles de service, nos pages de liste de services, essayant d'attraper tous nos services pages, puis un signe de variable et mettre cela dans notre modèle appelé services. Alors allons de l'avant et voyons ce que cela revient. Il nous donne le nettoyage et la brillance. Et maintenant, nous savons si nous devions tester ça dans son émission. C' est chaque fois que nous tapons des objets de tir de paiement point en direct public. Avec les pages actuelles que nous avons, il va seulement nous donner les deux options. Et donc si vous allez voir notre page et que vous voyez trois cartes sont qu'une seule carte ou un service apparaît, il est probable qu'il y a quelque chose d'autre qui se passe parce que nous savons pour un fait qu'il y a deux ici donc câblé à ne s'affiche pas sur un modèle. Et maintenant, nous commençons à nous lancer dans un débogage et d'autres choses. Enfin, nous avons le repo réel lui-même afin que nous puissions voir tout ce qui va dans maître. On peut y aller. Regardons la version 2.7 et nous pouvons y aller et nous pouvons voir toutes sortes de choses. Alors allons dans Wag Tail. Allons dans le noyau et regardons les modèles et ici nous pouvons voir que c'est, ah, ah, page de taille juste. Nous avons un site ah. Nous avons un gestionnaire de site et baisant tout le chemin vers le bas la page abstraite et regarder, il y a notre page elle-même, et donc maintenant nous pouvons lire tout le code source en dehors de notre éditeur dans notre navigateur. Et encore une fois, c'est tout ce qui vient avec un défaut. Attendez que page. Donc maintenant, nous avons une autre façon d'apprendre façon de l'autre façon d'apprendre chemin est honnêtement aller attendre jusqu'à ce que point io slash slack et nous verrons cette page charger. Rejoignez l'espace de travail mou pour savoir pourquoi dire à Come se joindre à nous sur le mou. Il y a toute une communauté que nous devons soutenir le canal Venez poser vos questions là-dedans aussi . Et donc à part suivre ce cours, tout ce que je peux vraiment dire est d'ouvrir votre shell plus et juste commencer à jouer avec les choses. Honnêtement, le pire des scénarios est que vous savez, vous cassez quelque chose dans votre base de données et vous devez créer quelques pages à nouveau, c'est un vraiment, vraiment bon moyen d'apprendre comment attendre jusqu'à ce que fonctionne et ce qui est livré avec et ce que vous pouvez faire avec wayto 39. Paramètres du site global: sont des options ou des points de données, si vous voulez, que vous pouvez définir sur votre site et qu'ils sont globalement disponibles. Donc, contrairement à une page lorsque nous définissons un champ particulier sur une page et que nous avons vraiment accès à cela sur ce modèle de page, un paramètre d'attente jusqu'à ce que le site vous permet d'accéder à ce paramètre de site depuis n'importe où maintenant. Un bon exemple de ceci est en fait un pied de page d'heure où nous avons des heures et des choses savent vraiment ce que je suis juste que je vais passer le serveur et je vais vous montrer donc l'exemple est dans son pied, ou nous avons contacté les heures et les médias sociaux paramètres. Ces air actuellement tous incontrôlés, même cette section ici, la mer mondiale aujourd'hui, avec un texte et un lien qui est tous actuellement incontrôlé. C' est des trucs codés en dur. On ne peut pas changer ça. Les paramètres du site nous permettent de modifier cela car il est disponible sur chaque page. Eh bien, nous ne voulons pas faire de travail supplémentaire pour chaque page, donc nous pouvons enregistrer un site définissant un paramètre de site personnalisé, et il sera juste disponible pour nous partout. Alors allons de l'avant et créer une nouvelle application ici, nous allons faire Python managé. Je démarre, Nous l'appelons site, souligne les paramètres et nous exécutons notre serveur comme nous l'avons fait à chaque fois. Allons savoir que ce n'est pas le droit qu'ils arrêtent. Je vais aller à la base dot pie et ici nous allons ajouter des paramètres d'état. Vas-y, dis ça. Enjoignez-le. Et dans notre explorateur ici, nous pouvons voir que nous avons un nouveau dossier appelé Paramètres du site. On n'interroge pas. Juste là va gérer ça pour nous. On n'a pas besoin de tests. Les tests sont principalement écrits pour Attendez jusqu'à déjà. En plus, on ne fait rien de dingue. On n'a pas besoin d'administrateur, DuPuy. Mais on va garder, non ? APS et modèles maintenant, essentiellement, ce que nous allons faire dans nos modèles de paramètres de site jusqu'à I file est que nous allons créer une sorte de classe comme les paramètres de médias sociaux. Il va orteil hériter quelque chose de Wag Tail appelé un réglage de base. Et puis on va lui donner un champ pour lui donner Facebook. On pourrait lui donner Twitter, YouTube et Instagram. Je pense que c'est tout ce qu'on a, non ? Facebook, Twitter, instagram et YouTube. Oui. Et chacun d'entre eux va être un champ Vous êtes tous, donc les modèles que vous êtes l Champ et Blank est égal à. Mettons cela sur plusieurs lignes. Vide est égal à vrai et le texte d'aide va être Entrez votre vide, vide vide vous êtes L. Maintenant, nous devons faire un peu de travail supplémentaire ici parce que celui-ci va dire Facebook. Entrez votre Facebook, vous Earl, et celui-ci va être entrer dans votre Twitter vous êtes sur celui-ci va être YouTube et si vous ne l'avez pas deviné, c' est ce qui va être Instagram. Mais encore une fois, parce qu'on fait ça en attendant de vouloir les exposer. Il nous faut des panneaux ici. Nous allons dire à un panneau de carburant pour Facebook, et copions cela quelques fois. Qu' est-ce qu'on a d'autre là-dedans ? Nous avons Twitter. Nous avons YouTube et nous avons instagram. Maintenant, à ce stade, nous devons nous assurer que les modèles sont importés. Le panneau Champ est importé et le paramètre de base est importé. De plus, nous devons également faire une chose de plus pour enregistrer cela en tant que paramètre parce qu'en ce moment n'est qu'une classe. Et si attendre était de s'inscrire, chaque classe est un paramètre. Nous aurions des centaines, peut-être des milliers, de différents paramètres à l'intérieur de l'attente. Alors allons de l'avant et faisons à partir des modèles d'importation db django dot. C' est nos modèles standard. Nous avons un paramètre de base, et voici ce qui est dû à partir de wag tail dot avec Trib dot paramètres dot dot model import paramètre de base . Nous allons également vouloir importer le décorateur de paramètres de registre, et nous pouvons l'appliquer immédiatement. Une chose pour garder un œil sur les années. Chaque fois que vous importez Con Trib, vous voudrez vous assurer qu'il est à nouveau activé. C' était le mauvais basé sur le fichier à tarte. Donc, ce que nous recherchons ici, c'est les paramètres Wag Tail Contra, et nous ne le voyons pas vraiment ici. Alors allons de l'avant et ajoutons nos paramètres. Jetons juste ici de façon à point avec les paramètres de point Trib. D' accord, alors vous pouvez enregistrer ça et le fermer, et maintenant nous avons accès à attendre les paramètres du contrat et le fichier des modèles qui en est à l'intérieur . Enfin, nous devons importer nos panneaux de champ parce que sans ces panneaux alimentés, alors que ce fichier va juste se plaindre, ou plutôt, nos terminaux vont se plaindre de ce fichier, bien que ce n'est pas le cas, et c'est tout à fait suspect. Oh, on y va. J' ai juste eu un coup. Enregistrer un pistolet de Wag point de queue à hommes point à ce gestionnaires importation terminal de panneau de champ et est heureux. Allons dans notre façon de dire aux hommes, et je vais quitter cette page. Et si nous allons dans nos paramètres ici, nous pouvons réellement voir que nous avons des paramètres de médias sociaux maintenant. Cela va nous donner une erreur attendue parce que nous essayons de stocker des données à l'intérieur de notre base de données, mais nous n'avons pas encore exécuté de migrations, alors revenons à notre serveur ici et exécutons Python managé haut, effectuer des migrations, et cela va faire nos paramètres de migration python, pas les paramètres. Instructions que le mot que je cherche Python a géré. Je migre, vais exécuter ces instructions et modifier un peu notre base de données. Et puis re serveur runner. Rafraîchissons notre page ici et voyons ce que cela nous donne. Donc maintenant, si nous allons dans ses paramètres, les paramètres des médias sociaux, cela nous amène à cette page où nous avons un Facebook, Twitter, YouTube et Instagram. de Je viensde remplir cette année Els et je vais cliquer. Économisez cool maintenant dans notre pied de page. On va devoir utiliser ces filles, et on va devoir faire un peu de vérification pour voir si elles sont vraiment réglées. Alors ouvrons le point de pied de page html Et fermons cette barre latérale et allons chercher des trucs sur les médias sociaux ici. Donc, nous avons un lien vers Facebook maintenant pour accéder au paramètre du site est super facile. Nous tapons juste les paramètres point de vue soulignement paramètres. C' est le nom de notre application. Donc, si vous avez nommé votre application quelque chose de différent, il va être ce que vous avez appelé votre application et puis ce sera les paramètres des médias sociaux remarqué que le boîtier a changé ici. C' est le nom de la classe, puis nous faisons Facebook parce que c'est le nom du champ. Alors sauvegardons cela et donnez-nous un peu de rafraîchissement rapide et survolez Facebook, et nous voyons que cela n'a rien fait. Maintenant, la raison pour laquelle nous ne voyons rien là-dedans est parce que encore une fois, c'est le mauvais basé sur l'ordre à secteurs, mon éditeur me le fait même si nous avons activé les paramètres d'attente jusqu'à ce que les paramètres du contrat. Bien, c'est bien, mais on vient de l'activer. Pour que nous puissions réellement obtenir les paramètres sur chaque page, nous devons ajouter quelque chose à nos processus contextuels. Nous devions donc être disponibles sur chaque page. Donc nous avons un processus contextuel ou quelque part ici. Donc, les modèles, les options, le contexte, les processeurs et celui que nous voulons activer ici est Attendez jusqu'à ce que les paramètres de point trib et puis les processeurs de contexte ne sont pas des paramètres. Et j'espère que je n'ai pas de fautes de frappe là-dedans. Ça a l'air bien. Rafraîchissons cette page. Et maintenant cela va se transformer en un lien pour nous et regarder cela en bas à gauche il dit facebook dot com, et si je clique, il va à facebook dot com. Donc maintenant, nous pouvons le faire avec tous les autres liens aussi bien. Donc celui-ci pourrait être Twitter. Encore une fois, les paramètres, puis le nom de votre application. Donc celui-ci s'appelle les paramètres du site. Nom des paramètres de médias sociaux de la classe. C' est comme ça qu'on l'appelait. Celui-ci est le champ Twitter, et celui-ci est le champ Instagram, et celui-ci est le champ YouTube. Et actualisons, assurez-vous que tous ces éléments fonctionnent comme prévu. C' est donc Facebook, Twitter, insta et YouTube parfait. Mais maintenant que se passe-t-il si l'un d'eux n'est pas rempli ? Nous devons écrire une condition if. Et si la condition ici et cela pourrait devenir assez laid maintenant, il y a des moyens de contourner cela, mais je vais garder ce simple et simplement vérifier juste pour ce champ particulier. Donc je vais dire si et cela semble assez long donc si cela existe dans la dette cela et dire et si et je vais le faire avec tous les autres aussi. Bon, donc j'ai juste ajouté ces paramètres là-dedans. Et juste comme un test, allons-y et nous allons nous débarrasser d'Instagram. Donc, nous avons trois champs de médias sociaux, mais Instagram est vide, donc il est rafraîchit et devrait disparaître et juste comme ça, place disparaît Parfait. Maintenant, allons de l'avant et ajouter des heures et notre contact avec nous maintenant. C' est super facile aussi. C' est à peu près la même chose. Est-ce donc ce que nous allons faire est de créer une autre classe. C' est ce qu'on appelle les paramètres de contact, et encore une fois cela va être un paramètre de base. Et avant de faire quoi que ce soit, enregistrons ça. Donc, enregistrons ce paramètre de registre. Là, nous allons et ajoutons un champ dans votre contact est égal à un champ de texte riche, et nous voulons que les fonctionnalités soient un lien sur Lee afin que les gens puissent lier mais pas de bols. Aucun titre n'est rien comme ça. Et allons de l'avant et disons aussi que cela pourrait être vide. vide est égale à true. Maintenant, nous allons nous assurer que personne ne puisse être fidèle à, je suppose. Et comme chaque fois, nous devons nous assurer d'avoir des panneaux et des années. Les panneaux sont égaux au contact du panneau de champ, et maintenant nous avons besoin d'importer un champ de texte enrichi à partir de la veuve dot core dot field import rich text field, et nous allons devoir exécuter à nouveau les migrations. Donc python géré par faire des migrations souffle sur managé haute migration Django Admin recommence , s'exécute comme rafraîchir nos paramètres ici, et nous verrons une fois la page actualisée et j'ai ouvert. Ce menu a ah paramètres de contact. Et maintenant, nous pouvons ajouter quelques paramètres de contact ici afin que nous puissions dire quelque chose comme Contact me. L' e-mail, je suppose. Et ça va être Caleb à apprendre. Attends, dis à dot com. Allons de l'avant et transformons ceci en lien e-mail et sauvegardez maintenant à nouveau. Cela ne va pas apparaître dans son pied de page à nouveau contre Django dans Wayto et Python et aucun autre langage de programmation vraiment intelligent pour savoir exactement ce qui se passe dans votre cerveau afin qu'il ne fasse aucune hypothèse. Mais ce qui nous permet de faire, c'est d'avoir le contrôle total. Alors, où il est dit, contactez-nous, nous pouvons maintenant dire site. Non, c'est faux. Paramètres que les paramètres du site pointent le nom du champ. Et parce que c'est du texte riche, nous mettons du texte riche en pipe, et cela vient des balises de noyau de queue Wag. Allons de l'avant et rafraîchissons votre page et voyons à quoi cela ressemble. Pas mal. Pas terrible. Débarrassez-vous probablement de la balise de paragraphe, mais c'est sur deux lignes au lieu de deux paragraphes. Ouais, ça a l'air bien. Et c'est un lien, et enfin, je vais juste copier et coller son intégralité pendant des heures aussi, et au lieu des paramètres de contact va être à nous. Les paramètres et au lieu de contact vont être des heures et au lieu de lien, il n'a pas de fonctionnalités, mais il est permis d'avoir un nouveau paragraphe, donc c'est pourquoi nous le mettons là. Il aime aussi avoir de nouvelles lignes. Je suppose que les paragraphes et vos prêts. C' est pour ça qu'on le met là-dedans. Disons que nous allons faire tout cela en une seule ligne. Faisons en python géré. Je fais des migrations et je termine python géré une tarte, migre et termine python géré par exécution. Donc la fièvre sur l'hôte local Port 8000 trois commandes une ligne pour les gouverner tous. Ok, nous allons rafraîchir. Et maintenant, nous avons nos réglages. Tu sais, on a mis quelques heures ici pour pouvoir dire quelque chose comme du lundi au vendredi. Riding était une drôle de façon à épeler vendredi. Ah, 9 h 25 h Et comme avant, nous allons ajouter ça là-dedans, donc les paramètres point les paramètres du site point les paramètres du contact. Non, ce n'est pas juste. Ça s'appelle nos paramètres, et le champ est appelé heures point heures. Il s'agit aussi d'un texte enrichi. Ok, ça arrive ensemble. Maintenant, nous avons une autre section ici, et je ne vais pas la couvrir parce que c'est très, très, très similaire à ce que nous avons fait. Et nous avons déjà couvert beaucoup de ces sujets à mort à ce stade. Mais nous pourrions ajouter un autre paramètre de site pour ce texte ici. D' autres sites ajoutant, pour cette taxe ici, un paramètre de vue pour qu'il page de lien vers vous. Donc, vous utilisez un panneau de sélection de page, puis vous venez de changer cette page deux être dans votre modèle. Ce serait comme les paramètres point de paramètres de site point c t une page de lien de point de paramètres ou tout ce que vous voulez appeler ce champ point u R l Si vous êtes intéressé à ce que cela ressemble, vous pouvez toujours vérifier le code source. Mais je ne vais plus vous garder sur cette vidéo parce que c'est à peu près tout ce que nous avons déjà couvert. 40. Modifier le logo Admin de Wagtail: est. Parfois, nous voulons que notre administrateur de site Web se sent un peu plus marqué et par défaut, façon Tell vient avec sa propre marque, ce qui est totalement cool. Mais l'une des plus grandes choses affaiblir Dio pour échanger avec cette image de marque est de simplement échanger ce logo et de façon nous permet de le faire vraiment facilement. Donc, vraiment, nous avons juste besoin de créer un nouveau fichier de modèle appelé Basé sur HTML. Mais il va vivre dans un dossier particulier, puis nous allons remplacer un bloc appelé Branding Block. Et généralement, je viens de mettre comme un SPG ou quelque chose là-dedans, et il l'écrase. Alors c'est Allons-y et donnons cette petite démo rapide. Donc je vais fermer ça et dans mon dossier de modèles. Donc modèles Rocketman. Je vais créer un nouveau dépôt ici, et le premier dossier va être appelé Wag disant hommes, et le fichier va être appelé base dot html. Maintenant, cela doit s'étendre à partir d'un fichier particulier. Donc, au lieu d'étendre à partir de notre basé sur HTML, il va s'étendre de la façon dont Tell et Men slash basé sur HTML et puis nous avons un blocage ici appelé le bloc de branding. Pas de logo de marque. Je crois que ça s'appelle. Oui, on saura si j'ai tort, mais il n'y a rien ici. Donc on se débarrasse de l'oiseau. Et bien sûr, il n'y a plus d'oiseau maintenant. Nous pourrions également charger en statique, et nous pourrions vérifier quels fichiers nous avons dans nos fichiers statiques. Donc, il est aller images statiques et nous avons le logo point PNG. Et je ne pense pas que je ai réellement un logo point s v g ici, bien que vous venez de coller dans le SPG lui-même. Donc, nous allons à une image, et qui va être des images statiques logo point PNG sur l'autel va juste être le logo Rocket Man. Et où j'ai obtenu cette image d'une images statiques, puis logo point PNG images statiques logo point PNG PNG. Rafraîchissez-nous et voyons si ça a l'air terrible. Ouais, ça a l'air plutôt mauvais. Vous voudrez probablement utiliser une image différente. Je pense que ça serait beaucoup mieux si j'avais un logo blanc qui, tu sais, tu sais, air à moitié décent. Mais j'utilise juste le logo de la page ou l'avant du site, donc j'utilise juste celui-ci. Mais si vous avez un logo ou que votre client a un logo que vous voulez y mettre, c'est aussi facile que ça. Maintenant, ce que je vais faire est de commenter ceci. Je vais garder le code ici. Mais je vais commenter ça. Donc, si jamais vous avez besoin d'une référence ceci dans le code source, vous avez accès à cela immédiatement. 41. Ajouter des Caching: d' Parlonsd'un très gros encaissement de sujet maintenant. encaissement est l'un des moyens les plus rapides pour accélérer votre site Web sans avoir besoin de Teoh. Ajoutez du matériel supplémentaire à votre serveur sans que Teoh fasse vraiment quoi que ce soit pour augmenter les performances. Maintenant, il y a des tonnes de différents types d'encaissement. Mais pour garder cela simple et parce que je ne sais pas vraiment quels services vous allez utiliser , peut-être que c'est du mème cash, non ? C' est de l'argent élastique, etcetera, etcetera. Je ne sais pas vraiment. Nous allons juste rester avec un simple fragment de modèle d'encaissement maintenant. L' encaissement du modèle vous permet d'encaisser un morceau de votre modèle une fois qu'il a été traité pour la première fois. Donc, par exemple, notre en-tête ici nous pourrions encaisser ça, et ce serait exactement la même chose sur chaque page. Nous pourrions encaisser notre bannière, mais plus important encore, nous regarderions des sections d'encaissement comme celle-ci. Il pourrait y avoir un certain nombre de questions ici qui affaiblissent la réduction sur sa page en encaissant ceci, et donc nous pourrions encaisser toute cette section ou toute cette section avec des cartes, ou nous pourrions les encaisser ensemble. On pourrait encaisser toute cette page si on le voulait. Nous pourrions faire toutes sortes de choses avec l'encaissement de fragment de gabarit. Donc, en regardant sa page d'accueil, voyons combien de requêtes cela a. Cela a 36 requête SQL, donc ce n'est pas mal du tout. Mais le fait est que les requêtes SQL sont très lentes par rapport à tout le reste. C' est un peu comme, tu sais, quand tu dois conduire au travail et ensuite peut-être que tu vas travailler et que tu réalises, Oh, non, non, j'ai oublié mon ordinateur portable à la maison. Donc maintenant tu dois conduire tout le chemin de la maison, prendre ton ordinateur portable, conduire jusqu'au travail, et puis tu réalises, , j'ai oublié mon chargeur d'ordinateur portable. Donc vous conduisez tout le chemin de la maison, prenez votre chargeur d'ordinateur portable, revenez au travail. C' est vraiment, vraiment lent dans le sens où il fait plusieurs voyages comme ça, de votre site Web à ceci à la base de données, puis retour sur le site Web et aller-retour et aller-retour. Donc, si nous pouvons encaisser de lourdes zones de requête, nous pouvons réellement accélérer notre site Web de façon spectaculaire. Et l'idée est que si nous pouvons vraiment simplement supprimer les requêtes de chaque demande de page et encaisser avec quelque chose comme dans l'encaissement de mémoire Ce serait le meilleur, mais c'est à peu près impossible, mais nous pouvons vraiment réduire considérablement cette nombre. Maintenant encore une fois, 36 requêtes est assez bon. Si vous êtes à 200, vous commencez à avoir l'air un peu bête. Si vous avez plus de 200 Je dirais certainement Optimize maintenant pour cela, nous allons utiliser l'encaissement de gabarit, ce qui signifie qu'une section de votre modèle va être traitée. Donc, comme cette section va être traitée. Et puis une fois qu'il est traité, cette première fois va l'enregistrer dans un fichier cache point D J. Alors nous allons ah, allons sauter là-dedans. Nous fermerons ça et ouvrons, Dev dot pie. Nous allons faire notre mise en place d'encaissement ici, donc c'est vraiment juste dans notre développement local construit, et une fois que nous aurons fini avec cela, nous allons le déplacer vers notre fichier de tarte de production. Mais Deb type I est vraiment juste pour s'assurer que les choses fonctionnaient comme nous nous attendons à ce que ça marche. Donc, la première chose que je vais faire apparaître est de l'importation de base. Tout ça devrait déjà être là-dedans. Mais je vais aussi faire non seulement des importations os et mettre cela au sommet. Maintenant, j'ai une clé secrète. Loud Coast a autorisé l'e-mail hôte de retour dans, APS installé, middleware interne I P s. Mais une chose que je n'ai pas ici sont les formes d'encaissement. Et je me demande, est-ce que cela vient dans la production dot pie nouvelle. Est-ce que ça arrive ? Basé sur la tarte ? Est-ce qu'il vient dans la bonne base ? Tu as fini de mettre de l'argent ? Non, pas par défaut. Donc nous allons ajouter notre premier caissier. Donc celui-ci va être appelé par défaut. On va lui donner un back-end de django dot core cash. Cela va devenir très long, en passant, de l' argent basé sur un fichier de points basé sur un fichier de points et ensuite nous allons donner à cela un emplacement afin que l' emplacement va être quelque part. Nous ne savons pas encore où se trouve cet emplacement, mais généralement il va être dans une sorte de dossier de cache de points. Donc pour l'instant, disons point cash et ce que je veux faire est de le mettre dans le répertoire de travail actuel . Donc jamais géré les yeux en cours d'exécution. Je voulais en quelque sorte créer un dossier de cache de points juste là où c'est maintenant. Je ne sais pas où ça va être sur un serveur donné, donc nous devons faire une petite chose ici où nous ajoutons une balle très appelée C W D. Et cela n'existe pas encore. Mais C W A. D va être égal à os dot et obtenir le répertoire de travail actuel, et puis nous allons juste ajouter point cash à lui. Et ce que je vais faire ici, c'est juste m'assurer que je n'ai pas un type de dos et Django base de fichier de cash back INS faire de l'argent basé sur des fichiers. On y va. C' est très sujette à moi, faisant une faute de frappe qui est tous les serveurs sauvegardés en cours d'exécution. Et quand j'arrive sur ma page d'accueil, il ne sait pas encore quoi encaisser, donc ça ne va rien faire. Mais si j'ouvre mon éditeur ou si vous êtes dans votre terminal, vous pouvez faire LS ou aider, et vous pouvez voir ici j'ai un gros fichier appelé 911502 bla bla, bla, bla, bla, bla , bla, bla, bla, bla, bla neuf F un point d j Cash et c'est un fichier qui ne peut même pas être lu. Mais c'est un fichier de cache. Alors maintenant, allons de l'avant et ajoutons un peu d'encaissement. Nous allons le faire en ouvrant notre page d'accueil, page d'accueil html point de page d' accueil et où se chargaient nos balises. Ajoutons de l'argent ici. Je veux dire, fermez cette barre latérale. Et maintenant avec cette étiquette de cash va ressembler à est que nous utilisons le mot cash Combien de temps nous voulons que cela soit encaissé pour en quelques secondes, puis un nom. Donc, vous savez, page cash, quelque chose comme ça et ensuite des champs uniques optionnels pour le rendre un peu plus unique afin que nous puissions appeler chaque page cash pour chaque section pourrait être appelé page cash. Mais celui-ci pourrait avoir une idée unique de 123 et donc nous avons un cash block d'ouverture et un cash block comme ça, et c'est comme ça que ça marche. Donc nous allons aller de l'avant et nous allons encaisser nos champs de flux sur la page d'accueil et nous allons faire une petite expérience ici, donc nous allons encaisser ça pour Ah, c'est quoi 30 jours ? Quelque chose comme si je me souviens 259200 zéro Que de secondes, Quelque part là-bas, nous allons appeler ce flux de page d' , Quelque part là-bas, accueil champs, et nous allons lui donner une page, Je d juste pour le rendre un peu plus unique et faire et de l'argent. Ok, j'ai gardé ça. Et maintenant, comme une petite expérience, je ne vais pas recharger cette page. Je vais attendre d'éditer ma page d'accueil. Je vais changer du texte sur la première section ici. Ta fusée était dans l'espace récemment ? Faites-le nettoyer et ce sera le titre mis en cache. Et puis regarde ça. Ça va sauver. Actualisez la page. Cela va maintenant créer un nouveau fichier de trésorerie pour moi. Ça va dire l'argent au titre, et je vais me débarrasser de tous nos champs de flux pour que plus rien ne puisse apparaître. Et quand je rafraîchis cette page, tout apparaît toujours parce que c'était de l'argent comme un fragment de modèle. Django dit maintenant, Oh, cherche de l'argent. Assurez-vous que c'est moins de quelques secondes. Son nom est flux de page d'accueil, et il a une idée unique de toutes les idées de page. Peu importe qu'il n'y ait plus rien ici, ça dit. Fondamentalement, je cherche un fichier appelé ceci et ça en fait un petit hachage bizarre. Jetons un coup d'oeil à ce hachage. C' est ce top ici. Donc, il fait un hachage sur le nom du fichier et dit, Oui, ce fichier existe certainement, donc je ne vais pas rendre quoi que ce soit entre l'argent et l'étiquette de fin de cash. Je vais juste rendre ce qui était jamais dans ce fichier, et donc il le stocke dans un autre fichier, et maintenant il n'y a pas de requêtes supplémentaires. Alors ouvrons ceci et nous voyons que nous avons 26 requêtes ici. Je pense en fait qu'il était 36 à l'origine était 36 requêtes, et maintenant il n'y a que 26 requêtes. Nous pourrions réduire le nombre de requêtes en encaissant notre en-tête et notre pied de page sont également. Le pied est probablement assez rapide, lourd aussi. Maintenant, je vais annuler cela et nous allons rencontrer un problème maintenant parce que cette page est encaissée. Je vais changer le titre ici pour être et le champ de flux non encaissé, et je vais prévisualiser ceci. Ça me montre encore l'ancien. Le titre en espèces. Celui-ci devrait dire un titre non encaissé en ce moment. C' est ce que j'ai écrit ? Un champ de flux non encaissé ? Mais il dit toujours que les vieux trucs si jolie vue est maintenant cassé à cause de l'encaissement. Mais ce que nous pouvons faire dans notre modèle, c'est que nous pouvons détecter si c'est un aperçu ou non. Donc, nous pouvons dire, si ce n'est pas la demande est aperçu et cela va être vivant. Sinon, il s' agit d'un aperçu, et ce sera un aperçu, et nous pouvons même vérifier cela aussi. Alors faisons ça. H un. C' est en direct et faisons un autre H qui dit aperçu. Et rafraîchissons notre page ici. Maintenant, c'est à l'extérieur de la zone d'encaissement. Donc, ça va marcher. C' est en direct. Et celui-ci quand j'ai actualisé l'aperçu dit aperçu. Donc maintenant, ce que nous pouvons faire est que nous pouvons prendre cette section de l'argent et ne l'appliquer que lorsque les pages sont réellement en vie. Et dans l'aperçu, nous ne voulons pas appliquer d'encaissement. Donc nous allons prendre ce bloc de quatre ou cette boucle de quatre, et nous allons l'appliquer ici. Donc, fondamentalement, s'il s'agit d'une page en direct, rendez cette section en premier. Et une fois que le rendu est terminé, jetez-le dans un fichier cache et ne vous inquiétez plus jamais à ce sujet jusqu'à ce que ce temps s'écoule. Sinon, s'il s'agit d'un aperçu, vous pouvez voir vos aperçus ici. Il n'y a aucun encaissement. Et si je clique à nouveau sur l'aperçu, ce non dit un champ de flux non encaissé. Et si je retourne à la page de vie et me rafraîchis, ça dit toujours les vieux trucs. Donc, l'aperçu fonctionne maintenant. Maintenant, nous rencontrons un autre problème, et c'est à peu près ce que c'est l'encaissement en un mot. vitesses de votre site Web, mais vous avez rencontré quelques problèmes ici est que je vais changer ça pour un tout nouveau titre, et euh, à ceux de l'aperçu, je vais fermer que quand je rafraîchirai la page en direct ici à nouveau, rien n'a changé. C' est parce que attendez et Django aucun d'entre eux ne sait que ce contenu ici est réellement changé. Tout ce que ça dit c'est que , quand je rendrai le modèle, je vais chercher ce fichier, quel que soit le nom de ce fichier. S' il existe, jetez-le ici. Il ne vérifie pas si cela a changé. Cela irait à l'encontre du but de l'encaissement. Allons donc de l'avant et supprimons l'encaissement chaque fois que la page est sauvegardée. Donc, je suis sur les modèles maison dot pie et au bas ici je vais créer une nouvelle méthode appelée Enregistrer. Maintenant, cela vient avec la page déjà, et nous allons simplement la remplacer. Arts et œufs de noix de coco. Et une fois que tout sera fait, on va courir quoi que ce soit. Attendez de vouloir nous enfuir. Alors économisez et on va passer nos chiens et nos cordes. Maintenant, ici est là où nous devons nous débarrasser de notre argent, la page cash qui existe déjà. Il faut qu'on s'en débarrasse. Non, Django est livré avec une fonctionnalité vraiment agréable qui nous permet de faire la clé de fragment de modèle , puis de la supprimer. Donc, nous allons faire cette clé avec une fonction appelée make template fragment key. Maintenant, ce n'est pas encore importé, mais nous l'importerons dans un instant. Et le premier paramètre sera ce titre ici. Flux de page d'accueil. Donc, nous donnons cela sous forme de chaîne, et le deuxième paramètre sera ce que cette page idées maintenant, à ce stade, nous ne savons pas vraiment ce que ces idées de page, mais cela n'a pas vraiment d'importance parce que nous savons que I d est un champ sur la page d'accueil, donc nous pouvons simplement faire self dot i d. Parce que c'est une programmation orientée objet. Nous avons le doute de soi I d. Et je d vient de Page elle-même vient en fait d'un modèle de jungle. Donc maintenant, nous avons une clé là-dedans, et tout ce que nous avons à faire est de lancer de l'argent, supprimer au-delà de la clé, puis cela va sauver la page. Et puis une fois que les pages chargées une fois de plus, il sera à nouveau encaisser pour nous. Maintenant, nous devons nous assurer que nous avons fait la clé de fragment de modèle importé et aussi de l'argent. Alors allons en haut de notre page ici et faisons à partir de django dot core cash import cash. Et faisons aussi à partir de django dot core dot cash dot que vous importez tills, faites fragment de modèle et voyons aucune plainte jusqu'à présent dans le terminal. Et vérifions simplement que nous avons encore ce problème. Donc, nous avons ici une section appelée un tout nouveau titre, et quand je rafraîchis cette page, il montre toujours le cash one. Allons de l'avant et publions Il dit qu'il n'est pas terrible. Donc j'ai un problème quelque part. doute de soi, i D. Et la raison qui est arrivé est parce que vous pouvez réellement passer plusieurs paramètres à votre argent. Et c'est censé être une liste, et c'est pour ça que nous faisons des tests. Alors actualisons la page. Contenu du feu équitable. Y a-t-il un tout nouveau titre cliquez sur publier ? Attendez qu'il sauve. Et maintenant, lorsque nous actualisons cette page, cela va changer un tout nouveau titre. Cette page contient 36 requêtes car elle exécute toutes les requêtes dans tous nos différents champs de flux. Mais si nous actualisons, il n'y a maintenant que 26 requêtes maintenant nous pouvons faire exactement la même chose à notre en-tête et un pied de page et toutes sortes de choses, mais je pense que nous allons enregistrer cela pour la prochaine leçon parce que ce n'est pas tout à fait le même très, très similaire. Mais ce n'est pas tout à fait pareil. Nous devons ajouter la méthode de sauvegarde à notre menu et Teoh tas de paramètres de notre site, donc nous allons le faire dans la prochaine leçon. 42. Caching de la navigation et pied: Ok, Dokey. Dans notre dernière vidéo, nous avons ajouté l'encaissement de modèle à notre champ de flux de page d'accueil à chaque fois que nous avons sauvegardé la page, il a supprimé l'ancien argent comptant. Et quand nous avons rechargé la page, il recréait l'argent. Nous nous sommes également assurés que chaque fois que nous cliquons sur l'aperçu, nous n'obtenons pas la version mise en cache de la page. Et cela a réduit nos requêtes de dizaines. On avait 36 requêtes. Nous avons maintenant 26 requêtes, mais allons de l'avant et encaissons notre en-tête et notre pied de page et essayons de réduire encore plus ces cruautés . Aussi, si nous regardons le temps CPU, je crois que c'était à l'origine quelque part autour de 850 millisecondes. Certes, ce n'est pas un ordinateur dédié, et j'enregistre aussi ce qui n'est pas, ça va prendre un peu plus de temps, mais je pense qu'on pourrait faire tomber ce numéro un peu aussi. Alors les premières choses d'abord. Allons de l'avant et ouvrez le point d'en-tête html et nous voulons ajouter la balise de modèle d'encaissement ici. Et qu'est-ce qu'on veut encaisser sur notre en-tête ? Y a-t-il quelque chose de dynamique dans votre ? Non, pas vraiment. Nous n'utilisons même pas de classes actives sur nos liens. Donc, en fait, c'est OK. On pourrait probablement encaisser tout cet en-tête. Donc, dans son dossier d'en-tête, on pourrait juste ajouter de l'argent ici si on le voulait. Mais en fait, je n'aime pas vraiment faire ça. Et je veux juste encaisser ce petit fragment ici. Juste notre boucle for. C' est la partie chère. Donc on va ajouter de l'argent pour 2592000, je pense que c'est environ un mois en secondes. Faisons 30 jours fois 24 heures 60 fois 60 fois. Pourtant, il y en a. 2592 Triple zéro Mort l'a cloué. Maintenant, je vais juste appeler cet en-tête de site sur la page d'accueil. Nous nous avons donné un paramètre optionnel supplémentaire, celui-ci que nous ne allons pas parce qu'il va juste être appelé l'en-tête du site et Let's and cash and on va ouvrir les menus modèles dot pie. Et à chaque fois qu'on garde notre menu, c'est là que tu es ce type ici ? Chaque fois que nous allons dans un menu et que nous sauvegardons cet objet particulier de ce cours, nous allons couper cet argent. Nous allons supprimer le fichier cache le fragment de modèle, et nous allons lui permettre d'en créer un nouveau où la prochaine personne accède à notre site Web. Donc, au fond, je vais simplement dire que la mort s'est sauvée. Passons dans certains quartiers oeufs et en supposant que tout est bon à la fin de cela, nous allons courir super sauver et passer ces cartes aussi bien. Ces arguments de mots-clés. Et cela va juste exécuter la méthode save sur la classe de modèle Cluster Herbal. Et maintenant, nous devons créer une clé. Donc, il est de créer une clé, et cette clé est appelée ou en cours d'exécution. Plutôt, cette clé exécute make template fragment key, et celui-ci n'a que le seul paramètre donc vraiment besoin de mettre celui là est appelé En-tête de site. Et puis faisons des points de cash supprimez la clé. Et sur notre page d'accueil, nous avons importé de l'argent et faisons la clé de fragment de modèle. Donc, je vais littéralement juste à la page d'accueil à ce stade parce que je l'ai déjà écrit . Je vais le copier et dans mes menus modèles vers le haut. J' allais le coller là-dedans. Cela semble bien, et maintenant nous pouvons dire si cela fonctionne vraiment parce qu'il va y avoir des requêtes supplémentaires qui vont être retirées. Donc, la première fois que vous appuyez sur cette page, il ne va pas enregistrer de requêtes. Comme vous pouvez le voir, c'est encore 26 Caries ou que 28 requêtes. Maintenant, il devrait y avoir un peu d'encaissement de gabarit ici. Maintenant, quand je rafraîchis la page à nouveau, je suis réduit à 23 requêtes. Donc ça nous a sauvé cinq. Donc pas vraiment une grande performance a augmenté leur je soupçonne beaucoup de cela vient en fait du pied de page où nous allons voir les plus gros gains. Alors, nous allons faire ça aussi. Donc maintenant, nous pouvons aller à notre point de pied de page html parce que nous ajoutons de l'argent. Nous devons ajouter cette étiquette de modèle d'argent. Et nous savons que nous avons sauvé cinq requêtes immédiatement à partir de l'encaissement de ces quatre boucles qui étaient dans l'en-tête. C' est fondamentalement exactement la même boucle quatre avec Celle-ci est dans le pied de page. Maintenant, nous pouvons ajouter l'encaissement. Voici un cash 2592000 Vous pourriez définir ce nombre pour être significativement plus bas, significativement plus élevé. Si tu veux. Nous allons appeler ce pied de page de site et de cash et Allons de l'avant et ouvrons nos modèles de menus. Maintenant, chaque fois qu'on économise ce menu, on devait casser l'argent ici. Baisse la tête, cash. Mais parce que cela utilise également exactement le même menu dans le pied de page. Nous voulions aussi faire tomber cet argent. Alors allons-y et affaiblissons. Copiez ceci au lieu de l'en-tête de vue. On l'appellera pied de page du site et c'est juste les matchs de pied de page, correspondances, correspondances, correspond à ce nom juste ici. Allons-y. Rafraîchissez notre page. Nous verrons que les requêtes ne changent pas quand nous en avons deux autres mais pas trop inquiet à propos de deux requêtes. Rafraîchissons-nous. Boum. Il descend à 20 et il est constamment 20 maintenant, ce qui est vraiment sympa. C' est CPU. Le temps diminue aussi. Une goutte de 200 millisecondes. Maintenant, nous allons de l'avant et l'argent sont nous contacter heures et nos paramètres de médias sociaux afin que nous puissions fermer le modèle de menus Stop I fichier, et nous allons juste travailler à l'intérieur du pied de page et le paramètre du site donc il est faire les paramètres du site . modèles haut est celui que nous devons ouvrir ici et avant que rien n'ait déjà cela dans mon presse-papiers donc je vais coller mes importations là-dedans. Donc, j'ai de l'argent et j'ai fait des fragments de modèle clé. Donc, chaque fois que nous enregistrons un de ces paramètres, allons de l'avant et casser l'argent. Maintenant, nous n'avons pas encore dit l'argent dans le modèle, mais nous pouvons le définir ici et ensuite le définir dans le modèle par la suite. Dit à Sourds Save. Cela va prendre auto tous les arguments et tous les arguments de mots-clés que nous passons là-bas et juste comme avant, Si tout est bon, exécutez super dot save. Passons les gardes. Passons les cartes et c'est bon d'y aller maintenant. Nous devons mettre la clé ici pour que la clé soit faite simplement fragmenter la clé. Quelle classe sommes-nous sur vos paramètres de contact ? Appelons ça Twitter. Paramètres de contact, Une nouvelle clé de suppression de point cash. Maintenant que nous avons cela, nous pouvons copier toute cette section parce que ce sera la même. Si cela fonctionne sur un seul paramètre de base, cela fonctionnera sur tous les paramètres de base. Et donc celui-ci est notre réglage des heures, donc les heures de pied de page, les paramètres, les observations sur les réseaux sociaux. Allons au fond, ici. Nous avons nos paramètres sur les réseaux sociaux, non ? Juste des observations sur les médias sociaux. Oui, pied de page. Ce qu'on appelle les paramètres sociaux. Et puis on a son pied ou son réglage. Et faisons la même chose ici. Paramètres du pied de page si ta. Maintenant, ce n'est pas parce que ces clés de modèle n'existent pas que cela va casser votre site . Donc actuellement, ces sections ne sont pas encaissées sur son site. Mais si nous allons au pied ou c t A Paramètres et je clique sur enregistrer, il n'y avait pas de clé de fragment de modèle à supprimer. Donc rien ne s'est passé. Ouvrons le point de pied de page html à nouveau. Et, ah, faisons toutes ces différentes sections. Je vais rendre ça juste un peu plus petit parce que c'est un fichier assez volumineux et je vais le faire. Je vais encaisser toute cette section ici, et celle-ci sera liée à nos réglages de pied ou C T A ou temple intérieur, Cash Foot ou C T. Alors prenons un peu d'argent ici. l'argent. Je vais encaisser ça pendant un mois aussi. Appelez ça le pied inondé ou les paramètres C T. A et ici et de l'argent. Nos liens sont déjà en espèces. C' est groovy. Nous pouvons encaisser sont les paramètres de contact ou nous contacter. Lequel était-ce ? Euh, mais, hum paramètres de contact Twitter. Donc, cela va nous sauver une requête aussi, bien que pour être honnête, ça ne vaut pas vraiment la peine, donc je ne vais pas le faire maintenant. La raison pour laquelle je dis cela est parce que, par exemple, cette section entière de liens en bas à gauche qui est encaissée et comment fonctionne l'encaissement de modèle est qu'elle prend votre fragment, et il le stocke toujours comme une seule requête SQL. Il doit frapper la base de données, voir ce qu'il cherche, qui a déposé censé chercher, Revenez, vérifier si ce fichier existe. S' il existe, utilisez-le. Donc, parce qu'il n'y aura qu'une seule requête SQL ici dans la requête SQL ici . Honnêtement, ça ne vaut pas vraiment la peine. Je vais laisser la clé de fragment de modèle et une suppression d'argent à l'intérieur des modèles, mais celui-ci n'en vaut pas vraiment la peine. Ah, un plus grand qui vaudrait la peine ici serait partout sur les paramètres sociaux, parce que pour chaque réglage ici, il doit rechercher Facebook, Twitter, Instagram et YouTube. Alors allons-y et encaissons tout ça. C' est pour encaisser 2592000 et nous allons appeler ces paramètres de pied de page social, et j'aime m'assurer que mon code est toujours un peu bien indenté et en espèces. Allons-y, rafraîchissez notre page. Et bien sûr, nous avons gagné deux autres requêtes pour juste un instant car il a créé l'argent et maintenant nous descendons à 17 et c'était à l'origine 850 millisecondes. Au début de cette leçon, il faisait 650 millisecondes, et il est maintenant réduit à 400 millisecondes. Donc c'est vraiment, vraiment bon. Et je suis prêt à parier que parce que nous sommes connectés, nous avons quelques requêtes supplémentaires pour authentifier notre objet utilisateur pour nous assurer que nous sommes réellement un final et des choses comme ça. Mais si nous ouvrons le mode incognito ici, oui, assez sûr, vous pouvez voir 10 requêtes prises en millisecondes et l'ensemble du site a pris 200 millisecondes 125 millisecondes. Donc, ce sont quelques assez bons gains de 850 millisecondes a à 25 de 36 requêtes à 10 requêtes et enfin, comme un petit résumé. Vraiment, tout ce qu'on a fait c'est qu'on a dit, Hey, il y a une méthode de sauvegarde sur notre base. Nous avons créé une clé de fragment de modèle. Et donc nous avons dit, C'est le seul paramètre que nous devons correspondre sur notre modèle. Donc, nous avons un pied ou un environnement social, et si nous retournons au pied de page ici cash pendant environ un mois et c'est là que nous trouvons ce texte ici, pied ou paramètres sociaux, alors nous prenons cette clé et nous la supprimons simplement. Et puis nous continuons à sauver ce modèle comme si rien ne s'était passé. Et maintenant, nous avons le gabarit encaissement partout. Maintenant, dans le code source dans le code source final, vous allez voir un tas d'encaissement de gabarits que je vais ajouter partout en ce moment. C' est juste l'en-tête, le pied de page et les champs de flux de page d'accueil, je crois, mais je vais l'ajouter à d'autres endroits aussi. Donc tu vas en voir un peu plus. D' accord. Enfin, si jamais vous voulez désactiver votre encaissement, vous pouvez toujours le partager. Ou ce que j'aime faire, c'est juste que je prends ça, sachant que ça fonctionne déjà comme prévu, Passez à la production dot pie, et je vais juste coller ça là-dedans. Et je veux m'assurer que j'ai aussi ce fichier OS pour cette importation du système d'exploitation. Plutôt. Et maintenant, je sais quand j'ai lancé ce site Web en production sur un serveur que je vais utiliser la production par le fichier Settings. Et donc cela va utiliser l'encaissement Temperley par défaut. 43. Ajouter un plan Sitemap: les cartes du site aident les moteurs de recherche. Retrouvez toutes vos pages. Attente A possède une fonction de plan de site, mais elle n'est pas réellement activée par défaut. Et dans cette leçon, nous allons activer les cartes du site et créer un nouveau site. Carte. U R L Donc, si nous ouvrons notre site Web, hôte local 8000 slash site map dot XML Ceci est généralement où vit une carte du site, mais dans ce cas, il n'y en a pas. Donc ce qu'on doit faire ici c'est ouvrir notre tarte à points de base. Donc ce qu'on doit faire ici, c'est qu'on a besoin d'où es-tu ? Les vérifications sont installées. APS. Nous devons obtenir nos AP insultes pour inclure des points rectaux avec Trib que les cartes du site Assurez-vous que ce n'est pas déjà là. Et ajoutons aussi le jangle un django dot avec les plans du site Trib Dad et ensuite nous allons ouvrir . Êtes-vous le fichier dot pie de RL, que nous avons touché seulement une fois dans tout ce cours, et nous y allons. On peut voir cet administrateur Django dont j'ai parlé à chaque instant et puis on ne l'a même pas regardé si honnêtement, si tu veux, tu peux tout simplement t'en débarrasser. Donc par et ici, je vais dire de barié Oh, ne pas escroquer Trib points plans du site points vues plan du site important et puis au-dessus de cette capture tout ce que nous voulons vous ajouter est Oh, carte du site dot xml Oui, nous pourrions Fais-le lire, Jack. Donc, il ressemble un peu plus au reste de notre code ici, Donc nous pourrions faire vous êtes l site map dot xml. Et au lieu de ça, nous allons simplement dire site maintenant, terminaux ne se plaignent pas du tout. Et je vais revenir au support local de l'hôte 8000 slash carte du site dot xml Et vous savez, j'ai la page de nettoyage des services de page d'accueil, la page brillance sur nous et le contact. Maintenant, j'ai un plan de site, et lorsque vous lancez votre site Web, vous pouvez soumettre votre plan de site à Bing et Google et à tous les autres moteurs de recherche. Les moteurs de recherche seront également par défaut. Recherchez la carte du site dot xml sur la carte du site dot html, mais il est toujours bon de soumettre de toute façon. Et vraiment, ce que cela fait est n'importe quelle page que vous avez une attente jusqu'à la page qui vivent. C' est public. Il apparaîtra ici 44. Préparation pour le lancement: maintenant, l' une de ces choses que nous devons faire est de créer une clé secrète. Et nous devons éditer nos hôtes autorisés et a dit que nos bases de données à peu près pour la plupart , nous allons travailler à l'intérieur de notre fichier de production dot pie. Donc ici, nous devons définir notre clé secrète est censé être quelque chose que nous ne savons pas encore ce que c'est et nous devons définir notre hôte autorisé est égal à une liste de domaines I ps, choses comme ça. Et nous pourrions même voir qu'il s'est efforcé haut hôte autorisé ? Oui. Est égal à l'étoile. On a déjà une clé secrète pour notre Deb. C' est juste pour le développement local. Nous voulons définir différents, une clé différente pour la production. Et nous voulons définir différents hôtes autorisés plus spécifiques hôtes autorisés pour la production. Donc, pour notre clé secrète, si nous venons d'ouvrir Firefox ou n'importe quel navigateur que vous aimez, et je vais juste aller à de nombreux outils Web dot com slash django générateur de clé secrète et créer une clé aléatoire et je vais copier cette clé et juste le mettre dans ma clé secrète comme ça. Maintenant, ce n'est pas la meilleure méthode de stockage de quelque chose de secret ne devrait probablement pas être conservé dans une chaîne plane comme celle-ci. Mais c'est quelque chose que vous pourrez aborder un peu plus tard. Pour l'instant, on va le faire de cette façon. Et puis dans nos hôtes autorisés, nous allons devoir définir quelques hôtes différents ici. Donc le 1er 1 va être l'hôte local. Engine X va l'utiliser sur notre serveur en direct, et je sais juste que nous allons avoir besoin de celui-ci. La prochaine est ce que nous voulons que notre domaine soit réellement. Dans mon cas, je veux ce site pour vivre à Rocketman dot appris wag queue dot com. Et le 3ème 1 sera notre adresse i p de Digital Ocean ou Lin due, ou AWS ou partout où vous configurez votre serveur dans ce cours, nous allons utiliser Digital Ocean, donc il va y avoir une adresse I P dedans maintenant. On ne sait pas encore ce que j'adresse, alors je vais mettre une étoile. Et chaque fois que vous l'utilisez en production, assurez-vous de toujours vérifier que vous le supprimez une fois que vous lancez le site Web . Suivant. Nous devons mettre en place nos bases de données ici parce que si nous allons dans pourrait être endetté haut. Non. C' est probablement dans les bases de données de démarrage I, mais nous utilisons Escalate. Trois étaient très bien pour le développement local. C' est assez rapide. C' est assez léger. C' est un seul fichier, mais en production, vous voulez quelque chose d'un peu plus robuste et nous allons utiliser post grass. Donc nous allons donner une nouvelle base de données ici. Les bases de données sont égales à, et nous devons lui donner une valeur par défaut. Ce sera juste quelle que soit la base de données standard par défaut va être. Et puis ça va venir avec un moteur dans tous les bouchons, et ça va être une sorte de chaîne. Un nom à nouveau, toutes les majuscules C'est aussi une chaîne d'un utilisateur. Ceci est notre utilisateur de robe post. Le nom était le nom de la base de données que nous allons utiliser aussi une chaîne le mot de passe, que nous allons mettre dans une chaîne. Mais il suffit de noter que si vous pouvez le mettre dans une variable d'environnement plus tard, faites certainement qu'un hôte, l'hôte va toujours être un hôte local et notre port par défaut, je crois, est 5432 Cependant, nous sommes va juste laisser cela comme une chaîne vide par défaut à 5432 Alors remplissons quelques-unes des choses. On a besoin d'un moteur. Utilisons django dot db dot arrière se termine post néerlandais Gress que el Psycho PG, aussi. Et notre nom de base de données va être Rocket Man. Je le sais parce que c'est ce que je vais mettre en place. Comme dans la vidéo suivante, vous voudrez peut-être changer le vôtre. Le mien va s'appeler Rocket Man et l'utilisateur. L' utilisateur Post press que je vais utiliser sera également appelé Rocket Man et le mot de passe à nouveau si vous pouvez le mettre dans une variable d'environnement. Mais je vais juste jeter ça dans une corde pour l'instant, juste pour garder ça gentil et simple. Parce que le lancement du site Web n'est pas toujours super simple. Allons-y, donnez-lui un coffre-fort maintenant. La prochaine chose que nous voulons faire est d'installer Century Century comme un programme de surveillance jamais, donc chaque fois que votre site Web vous jette un air 500. Tu n'as pas besoin de creuser pour des bûches. Il vous donnera la trace complète tout de suite, et c'est totalement gratuit aussi. Alors passons au point io du siècle, et je vais commencer rapidement. Acceptez cela, et je vais juste créer un nouveau compte ici. C' est totalement gratuit aussi. Je m'appelle Caleb Tallinn. Mon e-mail va être Caleb au moyen appris de point com. Mon mot de passe va être quelque chose que mon nom d'organisation va être appris. En fait, celui-ci ne va pas être appris. Attendez que ce soit Rocket Man. Je n'ai pas besoin d'informations de facturation et je veux des mises à jour. Pas de conditions de service convenues. Et quand on aura fini, il suffit de cliquer. Continuez. D' accord. Et c'est en gros dire, Hey, bienvenue au siècle. C' est notre sur l'embarquement. Oui, je suis prêt. Il va demander quelle plate-forme utilisaient. Ils utilisaient la couche angulaire du réacteur de la symphonie PHP L A à Ruby Python. Quoi que ce soit, nous utilisons Django. Créons un projet. Maintenant. Cela va nous dire exactement ce que nous devons faire pour obtenir cela installé donc nous passons à l'étape 3 installé un sdk siècle. Donc, nous allons vouloir mettre ceci dans notre fichier d'exigences juste comme ça, et nous voulons copier tout cela dans notre tarte de production, et je vais juste mettre tout juste là. Je ne vais pas m'inquiéter de réparer les importations, les mettre au sommet. Tu peux, si tu veux. J' aime garder tous les trucs du siècle ensemble, et c'est ce que je vais faire. Il suffit de nous copier et de nous coller directement dans la tarte à points de production. Maintenant, je vais garder cela ouvert parce que l'étape suivante est de vérifier que les siècles installés en créant un modèle ul. Mais si vous utilisez le code source que j'ai fourni, ou si vous regardez le code source que j'ai fourni, il y a effectivement une erreur là-dedans, et nous allons résoudre cet air seul dans la leçon suivante. Une dernière chose que nous voulons faire ici est d'ouvrir notre fichier de tarte au whisky dot et ici, et vous pouvez juste le voir dans le dossier Rocketman appelé whisky dot Pie. Il dit que les paramètres Rocketman que Deb, ce sera votre projet sur les paramètres point Dev, je vais changer la production de point sourd à point. Et tout cela veut dire que vérifier s'il y a un module Django Settings dans notre environnement. Donc, il cherche une variable d'environnement. Et s'il n'y a pas de défaut à celui-ci, et je vais le sauvegarder aussi maintenant, avant d'entrer dans la prochaine vidéo où nous allons de l'avant et de lancer tout ce site Web sur Digital Ocean, nous devons nous assurer que nous avons ceci dans un dépôt git. Non, je vais vous laisser le soin de mettre ça dans n'importe quel dépôt que vous n'aurez pas Hub obtenir Labit Bucket, quelque chose comme ça. Mais nous allons certainement avoir besoin de tout ce code dans une sorte de système de contrôle de version nous pouvons accéder sur notre serveur parce que nous allons cloner cela et nous pourrions avoir besoin faire quelques changements et puis de le remettre à notre contrôle de version système tel que get hub 45. Lancement site Web !: d' accord. L' heure est maintenant que nous allons lancer notre site web sur Digital Ocean. Maintenant, les étapes peuvent être largement répliquées sur Lynn Owed ou AWS ou sur n'importe quel autre fournisseur de cloud . J' utilise juste l'océan numérique parce que je les aime bien. Ils sont gentils et simples. Ils ont un bon prix. Et ai-je dit qu'ils sont gentils et simples ? J' aime vraiment ça. Donc, si vous n'avez pas de compte océan numérique, vous voudrez probablement en créer un. D' habitude, ils ont une promo qui dit, tu sais, si tu t'inscrives, tu peux avoir 20 ans, 50$ comme argent gratuit. Mais j'ai déjà un compte, donc je vais me connecter. Bon, donc j'ai juste un nouveau projet dans Digital Ocean appelé Rocket Man. Tu vois que j'ai déjà du revêtement pour tout le monde. J' aime l'hébergement avec Digital Ocean, évidemment. Donc je vais juste créer une toute nouvelle gouttelette ici. Je vais m'assurer que je vous ai été à 18 choisi juste un plan standard et je ne veux pas dépenser 40$ par mois. Je veux dépenser 5$ par mois 40$ est mieux si vous avez plus comme vous avez besoin de cinq téraoctets de transfert ou 160 gigaoctets d'espace disque SSD ou huit gigaoctets ou quatre utilisation CP. Tu sais, on n'a pas besoin de ça. Il nous faut un concert, 25 gigaoctets de l'espace SST et un téraoctet de transfert. C' est assez bon pour ce que nous faisons avec un petit site web. Je n'ai pas besoin de stockage en bloc ou quoi que ce soit comme ça. Je vais juste choisir celui qui est le plus proche de moi. San Francisco est le plus proche de moi. Curieusement, je suis plus proche de San Francisco que de Toronto, même si je suis au Canada. clés SSH. En voici un gros. Vous allez vouloir ajouter votre clé ssh, donc si vous n'en avez pas déjà, vous allez vouloir en ajouter une. Cela va vous rendre la vie incroyablement plus facile. C' est la même clé ssh que vous donneriez Get hub ou obtenir le bucket orbit lab ou la clé ssh qui pourrait être déjà sur un autre serveur. C' est exactement la même chose. C' est votre clé SSH publique, et il vous dit même comment vous pouvez le faire ici. Donc, il y a quelques belles étapes. Si vous n'en avez pas, vous pouvez créer une mine déjà sélectionnée. Je n'ai pas besoin d'ajouter de balises. Je vais choisir le nom d'hôte ici. Écoute appeler cet homme de fusée. Je n'aime pas celle qu'ils nous donnent d'habitude. Je vais activer des sauvegardes pour un dollar par mois. Pourquoi ne pas créer cette gouttelette ? Ok, ma gouttelette est créée maintenant. J' ai besoin de SSH dans des années. J' ai besoin de cette adresse ici. 167172113119 fois dans une copie qui ouvrons un terminal et ssh ici. Alors faisons la route ssh à et puis l'adresse i P. Oui. Permettez-moi d'entrer et bonjour. Nous sommes à l'intérieur de notre serveur. Donc maintenant, nous pouvons lancer ls être libérés, Dash a. Nous pouvons voir que nous vous utilisons chignon à 18.0 4.3. LTs Maintenant, avant de faire quoi que ce soit, nous ne voulons pas faire quoi que ce soit dans l'utilisateur root. Nous voulons créer un nouvel utilisateur. Ce n'est qu'une bonne pratique. Un peu plus sûr de cette façon. Ajoutons donc un nouvel utilisateur. Je vais appeler le mien Caleb, lancer toute cette vidéo. Je vais appeler mon utilisateur. Caleb, vous voudrez peut-être appeler votre nom. Donc, quand vous voyez mon nom, n'hésitez pas à le remplacer par le vôtre. Je vais entrer un mot de passe ici, et je vais le refaire. Mon nom complet est Caleb Tall dans mon numéro de chambre. travail, téléphone à domicile, autre. Est-ce que cette information est exacte ? Oui. La plupart de ces informations n'étaient que vides. Et maintenant, nous devons faire de moi un super utilisateur. Donc, faisons utilisateur mod dash un pseudo g Caleb. Et pendant que nous sommes ici, allons de l'avant et assurez-vous que ssh ouvert a activé grâce à notre u f W Maintenant, vous f w est. Ce que je dis, c'est ton pare-feu simple. Et c'est celui qui vient par défaut avec vous, Bond Do donc allons-y et faites-vous liste d'applications FW. C' est comme nous avons disponible Application Your open. Ssh. Allons vous permettre FW ouvrir. Ssh ! Et assurez-vous que vous tapez exactement la même manière était capital O Capital s s et H. Vous avez w activer. Oui. Procédure cette opération et vous état FW. Et cela nous montrera ce que nous avons à disposition. Donc, nous avons maintenant permis d'ouvrir. Ssh ! La raison pour laquelle nous faisons cela est parce que l'utilisateur Caleb que j'ai créé va maintenant être son propre utilisateur. Donc nous n'avons pas à Ssh avec la racine affaiblir. Ssh ! Avec Caleb ou avec votre propre utilisateur. Maintenant, nous avons une étape de plus avant que ce soit réellement disponible. Nous devons copier notre clé ssh depuis le compte racine vers le nouveau compte. Faisons notre évier, bord, tableau bord, tableau bord d' archive, bord ch propre Caleb Cool. Et Caleb l'a fait comme cette barre oblique à la maison Caleb aussi, Par ailleurs, toutes ces commandes que je vais mettre à votre disposition dans le texte afin que vous n'ayez pas à le faire avec moi à travers toute cette vidéo. Vous pouvez me regarder faire ça et ensuite passer par le texte plus tard. Il y a beaucoup d'étapes et vous ne voudrez peut-être pas mettre la vidéo en pause. Tu sais, 100 fois ça pourrait devenir assez ennuyeux. Allez-y, frappez. Entrez. Et maintenant, sortons de ceci. Je vais frapper le contrôle C ou D contrôlé, et je vais au ssh, Caleb. Et puis quelle que soit l'adresse I p, qui se trouve être 1671 71 13119 et regardez ça. Je suis maintenant en tant que Caleb et Rocket Man est mon serveur. Maintenant, c'est ainsi que nous créons un tout nouveau compte ou un nouvel utilisateur plutôt à l'intérieur de notre nouveau système U Bahn. Je vais ssh, Caleb à 167.172 point 1132119 Cette adresse p va être différente pour vous en fonction du serveur que vous avez configuré. Alors n'utilisez pas mon adresse i p parce que ça ne va pas vous laisser entrer. D' accord. Et puis un jour, je suis entré. Donc la première chose que nous devons faire est de vous mettre à jour, aussi. Si vous ne l'avez pas déjà fait, vous allez vouloir le faire à chaque fois. Vous démarrez un nouveau serveur. Donc Ryan Sudo, mise à jour d' Apt. Ça va te demander ton mot de passe, et c'est bon. J' ai déjà tous les trucs mis à jour. Vous verrez probablement une grande liste de choses qui ont été mises à jour. Ça pourrait même prendre quelques minutes, et c'est tout à fait correct. La prochaine chose que nous voulons faire ici est courir sudo Apt installer python trois tirets Pip python trois Dash Dev Limpy que dev Post sauvetage Oppose Kresk, Vous contrebande de santé, génétique et curl. On va utiliser toutes ces choses à nouveau. Ça pourrait prendre un peu de temps. Quand tu fais ça pour la première fois, ça va dire quelque chose dans le sens de Ah, il y aura 278 mégaoctets. Voulez-vous le télécharger ? Il vous suffit de cliquer ou de taper. Pourquoi et puis frapper. Entrez et il commencera à télécharger pour vous ensuite. Une fois que vous avez fait cela, créons un nouveau post Greste session plus post Gress si bientôt Oh, Dash, vous post pois herbe SQL. Maintenant, ce point, nous devons créer une nouvelle base de données appelée Rocket Man. Donc, vous allez vouloir exécuter quelques commandes différentes vous ? En fait, ce que je vais faire, c'est juste déplacer ça un peu. Alors faisons clair. Montez ici et je vais vous accompagner à travers les marches. Donc, première étape, vous voulez créer une nouvelle base de données appelée Rocket Man, alors créez la base de données rocket man, N'oubliez pas votre point-virgule à la fin. Maintenant ce que cela correspond est dans notre production haut fichier. Nous avons déjà réglé ça. Ça va correspondre au nom. C' est votre nom de base de données. Ça s'appelle Rocket Man Hit. Entrez et qui va créer une nouvelle base de données pour vous. Ensuite, nous allons créer un nouvel utilisateur appelé Rocket Man. Et donc celui-ci est créer l'utilisateur Rocket homme avec mot de passe et un mot de passe fou ici à nouveau. Ce mot de passe correspond à celui-ci dans notre fichier de production. Donc, il est de créer l'utilisateur rocketman une minuscule avec mot de passe, puis sont mot de passe fou avec un point-virgule à la fin. Ensuite, nous devons faire un peu de modification des règles ici. On va modifier un rôle. Rocketman a défini le codage client sur utf huit. Et ne vous inquiétez pas de taper tout ça. Je vais mettre tout cela au format texte aussi, de sorte que vous pouvez copier et coller la plupart juste parce que regarder une vidéo et la taper manuellement quoi ? Et puis le mettre en pause, impressionnant le jeu encore et encore et encore. Assez douloureux. Ne vous inquiétez pas d'avoir à faire tout ce que vous pouvez. Vous pouvez copier et coller la plupart de cela à partir du site Web d'attente appris. Donc que l'on dit juste que le client encodant à UFT huit le prochain nous voulons modifier un rôle. Rocketman a défini l'isolement de transaction par défaut pour lire validé et c'est juste définir notre transaction par défaut. Ensuite, nous voulons modifier un rôle. Rocketman a défini le fuseau horaire deux UTC. Donc, nous disons juste de définir le fuseau horaire à un temps régulier où vous pouvez totalement changer ces deux que vous voulez aussi. Ce sont les paramètres génériques avec lesquels j'aime travailler de toute façon, Donc ma base de données pense toujours que je suis sur le temps UTC. Une fois tout ce qui est fait, vous allez devoir exécuter une autre commande ici. Vous allez devoir accorder tous les privilèges sur la base de données appelée Rocket Man. C' est celui-là, ici, deux de l'utilisateur appelé Rocket Man, qui est celui-là juste ici. Maintenant, il se trouve que le nom d'utilisateur et la base de données sont les mêmes. Ils n'ont pas à l'être. Ils peuvent être totalement différents, mais dans ce cas, ils sont les mêmes, donc ça peut être un peu déroutant, mais pour la plupart, on en a assez fini avec ça alors allez-y, frappé. Entrez sur ça. Et quand tu auras fini, coupe Q pour arrêter de poster de l'herbe. Ensuite, nous devons mettre à niveau et installer Pip et Virtue. Et donc nous allons lancer pseudo Dash H Pip trois installé Dash, mise à niveau de tiret, Pip Et tout ce qui va faire est mise à niveau pipped vers la dernière version. Apparemment, j'ai déjà la dernière version, donc je fais Pip Dash V et je pourrais faire trois Dash V et nous pouvons voir est en utilisant Python 3.6 Maintenant . Je voulais utiliser Python 3.7, mais ce n'est pas un problème pour cela. Python 3.6 est tout aussi bien supporté que python 3.7 pour Wag Tail 2.7. Ensuite, nous devons installer notre extrémité virtuelle, donc nous devons faire Sudo Dash H Pit trois. Installez Virtual dans et cela va juste installer Virgil End maintenant. Je l'ai déjà installé, donc ce n'est pas un problème, et vous verrez un tas de taxés sur votre terminal aussi, disant Hey, nous l'installons virtuellement ont installé maintenant. Ensuite, je veux créer un nouveau dossier ici. Donc PWD est le répertoire de travail théorique dans lequel je suis. Je suis dans Slash home Slash Caleb. Si vous avez un autre utilisateur, ce sera différent. Ça va être slash à la maison Steve, si ton nom est Steve, alors je vais me dire. Faire un répertoire essentiellement des hommes de fusée. Et si vous êtes nouveau dans ce genre de langage comme UNIX, ceci est cultivé ici est dire barre oblique à la maison que dire à la maison. Donc, slash à la maison Caleb, c'est mon utilisateur et puis l'homme fusée et puis je peux voir le dans Rocket Man Si je fais p w d, on peut voir que la maison Caleb et Rocket Man est ma structure de dossier. C' est là que je suis en ce moment. Maintenant. À ce stade, nous pourrions faire les Dash L. A. Et nous ne voyons absolument rien ici. Et c'est bien. On ne veut rien là-dedans. Ne créez rien d'enver virtuel pour l'instant. Nous voulons cloner notre projet ici. D' abord cette semaine obtient ne se plaint pas d'essayer de cloner un projet dans un dossier qui existe déjà, existe déjà, ou vous devez cloner votre projet dans un autre dossier, puis récursif lee it, Déplacez tous vos fichiers vers le haut sur la ligne de commande. C' est un peu douloureux pour la plupart des gens. Au lieu de cela, ce que nous allons faire est de cloner notre projet dans ce répertoire vide. Donc, obtenez le clone, et puis quel que soit votre nom de repo maintenant, c'est juste un exemple de repo que j'utilise comme j'enregistre tout ce cours. Mais finalement, cela va être https. Obtenez moyeu dot com slash citation pour tout le monde slash rocket man. Et puis la partie la plus importante ici est votre point à la fin ce point signifie qu'il va installer ou cloner votre repo entier dans votre dossier dans lequel vous êtes actuellement. Non, cela va me demander de me connecter parce que j'utilise https au lieu de ssh. , Si je le fais,c'est Dash 1 un tadaa. On a tout là-dedans, y compris mon devi dot escalate 3, qui ne devrait probablement pas être là-dedans, mais il est là de toute façon, je vais l'effacer. Maintenant, allons de l'avant et créons une nouvelle extrémité virtuelle. Alors faisons Virtuel et Rocket Man Ven maintenant. La raison pour laquelle j'ai appelé ce Rocket Man ven est parce qu'il correspond à ce que nous avons déjà travaillé avec V et V pour notre projet local et être parce qu'il correspond à son fichier déjà inter get ignore donc nous n'avons pas à nous soucier accidentellement en engageant l' ensemble de notre environnement virtuel. Et maintenant, nous devons vraiment entrer là-dedans. Donc, faisons l'activation du bin fournisseur Rocket Man source et maintenant nous en sommes à l'intérieur. Et à ce stade, si on fait du gel de pip, c'est parfait. Tu ne devrais rien voir. Cela signifie que nous sommes à l'intérieur d'un environnement virtuel totalement propre. n'y a rien de préinstallé là-dedans. Maintenant, nous devons pip installer G licorne maïs biologique. Je ne suis pas vraiment sûr de la façon dont les gens disent que, avec PG psycho pour tirer les haricots froids binaires vous permet de choisir Freeze une fois de plus et nous verrons que nous utilisons G Unicorn version 20.0 point quatre et cycle PG Binary version 2.8 point quatre. Alors dégagez ça. Fais de la place ici encore. Maintenant, nous voulons pip installer notre fichier d'exigences Donc pip install dash Nos exigences dot txt savent ce que cela va faire est que nous avons fait cela avant, va prendre notre fichier d'exigences et installer Django Wegel, Django extensions, Jenga Widget tweaks et un sdk siècle. Alors allons-y. Installez que tout droit, Tout cela est installé, et maintenant nous pouvons exécuter notre serveur sorte de. Essayons d'exécuter son serveur avec les paramètres de production. Donc, faisons Python géré. Je lance le serveur 0.0 point zéro, Cour 8000 et spécifions les paramètres. Les paramètres sont égaux à la production de points de l'homme fusée. Donc c'est votre dossier Rocket Man. Il s'agit de votre dossier de paramètres, et il s'agit de votre fichier dupuy de production. Alors allons-y. Lancez ça et Ricky et voyez ce qui se passe. À ce stade, nous devrions voir quelque chose comme ça. Ça dit. Entrée manifeste de fichier statique manquante pour certains fichiers. Si vous voyez ça, c'est une bonne nouvelle. Cela signifie que tout ce que nous avons à faire est d'exécuter, collecter statique. Donc maintenant, nous pouvons exécuter Python géré jusqu'à. Je collecte statique et oh, non, il dit que nous n' avons pas de barre d'outils de débogage de nom de module. Et c'est parce qu'à ce stade, nos serveurs essayant d'exécuter Dev au lieu d'exécuter nos paramètres de production ici, il essaye d'exécuter dev dot txt, et il cherche APS Debo Tuller installé qui n'existe pas qui n'existent que parce que nous faisions pip install Dash sont Dev dot txt, qui vient avec Django debug toolbar, PDB et tout le reste dans le fichier Requirements. Nous n'avons pas fait cela pour le serveur, et nous ne voulons pas le faire pour le serveur. Nous ne voulons pas que Django Debug Tool soit installé et nous ne voulons pas que dev dot pie soit utilisé. Nous voulons que nos paramètres de production soient utilisés, alors continuons. Collecter statique et faire les paramètres est égal à Rocket man point réglage production Stott. Et nous allons corriger cela en un petit peu afin que nous n'ayons pas à spécifier les paramètres tout le temps. Et ce que Ah, 279 fichiers statiques copié 357 post-processus et tout est allé dans notre répertoire statique à la maison . Caleb Rocket homme slash statique. Maintenant, si nous faisons pour le faire, si nous exécutons à nouveau notre serveur, nous devrions voir que vous avez 109 migrations non appliquées ou quel que soit le nombre que vous avez pour votre projet. Votre projet pourrait être différent de mon projet. Je crois qu'à ce moment, attendre jusqu'à ce que vient avec 89 migrations non appliquées. Nous avons donc simplement ajouté 20 migrations supplémentaires. C' est tout à fait correct. Je vais faire le conseil parce que ça ne va rien faire pour nous à ce stade . Ce qu'il nous faut, c'est qu'on a besoin de Teoh en premier. Nous allons nous débarrasser de ce drapeau de paramètres parce que c'est super ennuyeux. Tu pourrais vivre ta vie comme ça, mais je ne veux pas. indicateur de paramètres est que les paramètres sont égaux à Rocket man dot settings production comme ça, Ouais , non, c'est ennuyeux à droite à chaque fois. Donc on va se débarrasser de ça. Et au lieu de cela, ce que nous allons faire est d'exporter les paramètres Django. Module est égal à, et il s'agit d'une chaîne de paramètres DOT homme fusée ne produisent pas. Et maintenant, si nous faisons écho au module Django Settings, nous pouvons voir qu'il revient. Rocketman met en place la production. Maintenant, si je lance le serveur Jangle Run juste comme ça, nous allons voir qu'il utilise automatiquement les paramètres Rocket Man de production de points. Il ne le faisait pas auparavant, et si nous collectons statiques, nous n'avons pas besoin de faire de collecte statique avec l'indicateur de paramètres, non plus. Donc, faisons pour faire, nous allons juste comme un exemple, collecter statique, mais nous allons nous débarrasser de ces paramètres. Des drapeaux. Oui, et ça a parfaitement fonctionné, mais maintenant, quand nous exécutons notre serveur, nous pouvons voir que nous avons 109 migrations non appliquées. Allons de l'avant et migrons ceux-ci. Donc, annulez votre serveur avec contrôle. Vous voyez, c'est à python gérer dot pie Migrate sur et il va juste migrer toutes les 109 migrations ou le nombre de migrations que vous avez maintenant qui semble bon. Allons de l'avant et créons un nouvel utilisateur super avec python géré haut, Créer un super utilisateur et mon nom va être Caleb. Mon adresse e-mail est Caleb à appris wag queue dot com Mot de passe est que je ne vais pas le dire haute voix et j'ai un super utilisateur maintenant. Il y a peu de temps, nous avons vérifié u f w qui a dit pseudo vous statut fw, et nous nous sommes assurés que ssh ouvert était disponible pour nous. Allons de l'avant et ouvrir Port 8000 ensembles ne pseudo vous FW permettre 8000 et cela va nous permettre de voir notre site Web sur nos serveurs I adresse p avec un port dans l'URL et l'état C , et nous devrions voir cela. Maintenant, si nous ouvrons notre navigateur ici et aller à http et alors quel que soit votre port est ne sont pas votre port votre adresse i p. Donc mes adresses i p 167172113119 Port 8000. Ce 8000, c'est important. Ce 8000 va provenir de python géré haut port 8000 de serveur à la fin là. Donc, lançons cela et la page de mise à jour et nous pouvons voir que nous avons une erreur de serveur interne. Revenons maintenant à notre siècle quand nous avons installé siècle et il dit que nous avons notre premier événement. C' est parfait. Maintenant, si vous n'avez pas d'erreur, vous pouvez totalement ignorer cette partie. Mais si vous avez une erreur, Century va vous aider énormément. Alors emmenez-moi à mon événement, et celui-ci que nous regardons ici est en fait un plus ancien. C' était quand nous avons d'abord couru, recueillir statique, et nous avons vu que les fichiers statiques air manifeste. C' est ce que c'est celle-là. Donc c'est cool. Ça a été enregistré. Nous avons une autre valeur. Aaron. Ici. Les fichiers statiques manquants manifestent une blessure pour les images. Superposition de contact. Maintenant, c'est là que le débogage peut devenir un peu douloureux, donc habituellement ce que je fais c'est que je prends ça et je vais chercher tout mon projet pour le trouver. Donc, allons dans le code Visual Studio ou l'éditeur que vous aimez le plus. Et je vais juste faire une recherche globale d'images. Contact overlay point PNG Et ici je vois statique. Eh bien, cela commence à sembler prometteur parce que les fichiers statiques manifestes statiques se manifestent. Impossible de trouver ce fichier. Qu' est-ce qu'il existe ? Allons-y et jetons un coup d'oeil. Modèles. Nous voulons des images statiques. Superposition de contact. Bien sûr, cela existe réellement. Alors, c'est quoi l'affaire ici ? Il y a des chances que ce soit juste cette barre oblique pour que nous puissions nous sauver, nous engager et le faire tirer si nous le voulions. Ou si vous voulez faire un petit cow-boy, nous pouvons arrêter notre serveur et nous pourrions faire du pseudo nano. Ou, si vous êtes plus un assistant, vous pouvez également utiliser vim. Je vais utiliser Nano parce que c'est un peu plus facile pour les gens qui sont tout nouveaux dans ce genre de chose. Donc pseudo nano Rocket man slash modèles slash inclut barre oblique point de pied de page html et qui correspond aux modèles Rocket Man inclut le point de pied de page html, et je peux aller ici et faire pour bouger tout le chemin, et je veux juste me débarrasser de cela maintenant pour sauver, j'ai frappé le contrôle. Oh, et quittez A hit control X. Maintenant, exécutons notre serveur une fois de plus et voyons ce qui se passe. Voyons ce qui se passe quand on se rafraîchit ici. Regarde ça. Notre site est en train de se charger. Il ne semble pas que c'est beaucoup, mais ce sera un peu dans juste un peu. Donc ici, on peut dire que l'un d'eux a été résolu. Retournons ici. Nous savons que celui-ci a été résolu. C' était notre 1ère 1 et, ah, c'est là qu'il a frappé la page pour la deuxième fois. Il manque trop de contact, donc je sais qu'un a été résolu aussi. Fille, nous n'avons actuellement aucun problème. Maintenant, cela a l'air moche, mais c'est en fait fonctionnel. Donc, si on va voir les annonceurs, ça ne va pas être très agréable. Mais je peux mettre mes informations ici mon nom d'utilisateur et mon mot de passe, et j'ai consigné. Maintenant encore une fois, rien de tout cela ne va bien se charger, nous réparera dans un petit peu, mais c'est la preuve que notre CMS est opérationnel et que vous exécutez réellement du code python sur votre serveur. Revenons à notre terminal et appuyez sur, annuler ou contrôler, Voir pour annuler. Et nous allons juste nous assurer que nous sommes tous dans le même répertoire ici. Alors je suis à la maison. Caleb Rocket Man. Si vous n'êtes pas là, vous pouvez faire un CD labouré Home Slash Rocket Man, et cela vous amènera exactement où je suis. Maintenant, essayons d'exécuter ceci sans la commande Python run Server. Essayons de lancer ceci avec G Unicorns, Atsugi, Unicorn Dash, Dash, Bind et nous allons lier hôte local Port 8000 deux Rocket man dot Whiskey et revenons sur notre site ici et juste frapper Actualiser. Vérifie ça. Il est toujours en cours d'exécution. C' est toujours moche, mais il est toujours en marche maintenant. Cette fois, il est en cours d'exécution avec la licorne, et il ne fonctionne pas avec le serveur d'exécution jangle. C' est une bonne nouvelle. Maintenant, allons de l'avant et faisons en sorte que cela fonctionne vraiment bien. Donc, tout d' abord, nous ne voulons pas avoir à courir sur Unicorn Bind 0.0 dot 0.0 Port 8000 Rocket Mandel Whiskey et avoir cela fonctionne tout le temps. Nous voulions juste courir automatiquement en arrière-plan. Il est donc désactivé de notre environnement virtuel. Et nous allons pseudo nano à la mer système d slash système slash g licorne dot chaussette dans. Nous allons créer un fichier socket ici et ici, et je viens de coller ça se termine. Tu n'as pas à me regarder taper ça. Ah, et ici nous avons des unités, ce qui est notre description. Douille licorne. Nous avons une socket lui indiquant quelle socket a déposé à utiliser et un tas de titres d'installation. Allons-y, Contrôle. Une fois que vous avez copié ça dans votre système en mer D système G licorne, ce fichier de prise est très important. Une fois que vous avez copié ça dans votre système en mer D système G licorne, ce fichier de prise est très important. Une fois que vous avez copié ça dans votre système en mer D système G licorne, Cela ne fonctionnera pas sans socket. Ensuite, nous voulons un pseudo nano ou eux si vous préférez les utiliser ou tout autre éditeur de ligne de commande Pseudo nano at sea system D system to unicorn dot service Maintenant ces noms doivent correspondre. Si Chef, la licorne dot socket n g licorne dot service Maintenant, ici, nous avons en fait un peu plus. Donc on a encore une unité. Nous avons cette description nécessite une prise de licorne g. Rappelez-vous, c'est pourquoi le nom correspond et inter service. C' est en fait la partie la plus importante que nous ayons. Notre utilisateur est égal à Caleb. Donc, ce sera quel que soit votre nom d'utilisateur si utilisé un nom d'utilisateur différent. Le groupe est dub, Dub, Dub données de tiret. C' est bon. Sont le répertoire de travail est la maison slash Caleb slash rocketman. Encore une fois, cela va être différent. Si vous avez un nom d'utilisateur différent et un nom de projet différent, le vôtre peut dire barre oblique steve Quel que soit le nom de votre projet, le début est à nouveau. Ça va être une chose de chemin. Donc, la barre oblique de votre nom d'utilisateur slash votre nom de projet slash votre fin virtuelle de nom barre oblique bin slash g licorne. Et puis aussi, vous devez vous assurer qu'ici où il est dit mandat de fusée Whiskey est votre nom de projet dot whiskey. Très, très important. Si vous rencontrez les problèmes de licorne dans le futur en quelques étapes de plus, probable que cela a été mal réglé et que vous avez un problème de chose de chemin. Maintenant, si nous faisons défiler vers le bas, il n'y a rien d'autre à reparler là-dedans, nous devons juste nous assurer que ces chemins sont absolument corrects. Allons-y. Contrôle Ode pour enregistrer le contrôle X pour quitter. Commençons la prise de licorne. On va le faire avec le pseudo système CTL start G Unicorn a socket et puis on va activer cette prise aussi bien. Avec le pseudo système CTL activé la socket de point licorne et il a créé un frère tout simplement bon. Et maintenant, à ce stade, nous pourrions faire système CTL état g licorne dot socket et obtenir le statut de cette socket et vous devriez voir l'écoute active. Il n'est peut-être pas en vert. Il est peut-être en blanc. C' est OK. Il est juste à ce stade devrait dire écoute active. Ensuite, nous devons vérifier l'existence de cette socket, donc nous voulons juste nous assurer que la socket existe. Donc, faisons le fichier slash exécuter g licorne dot socket et c'est en fait faux. C' est pas nul. On y va. Et donc cela devrait juste sortir que c'est un fichier socket. Maintenant, allons de l'avant et vérifier l'état de la licorne entièrement si pseudo système CTL statut à licorne. Et à ce stade, ne soyez pas alarmé, mais ça devrait dire mort inactif. Maintenant, nous contestons l'activation de socket avec une simple commande Curl. C' est pourquoi nous avons installé Curl beaucoup, beaucoup plus tôt pour que nous puissions faire Curled dash dash dash socket slash run slash g licorn dot sock hôte local. Maintenant, quand nous appuyez sur Entrée, nous devrions voir la sortie de notre site tout en html. Mais nous devrions voir la sortie de ça juste comme ça. Nous avons oh sortes de choses ici, et c'est la sortie de notre home dot html ou home page dot html template. Maintenant, si vous ne voyez pas cela, si vous voyez un 400 ou si vous voyez une autre erreur tout d'abord, vérifiez siècle assurez-vous qu'il n'y a pas d'erreurs là-dedans. S' il y a une erreur, assurez-vous d'abord de résoudre cette erreur. S' il n'y a pas d'erreurs dans le siècle, il y a des chances que le problème soit avec le fichier de socket G licorne ou la licorne G. Ce dossier de service, tu vas vouloir revenir en arrière quelques pas et les retoucher. Probablement c'est juste un problème avec le chemin. L' autre chose à vérifier est dans votre projet. Si vous rencontrez un problème, assurez-vous simplement qu'il s'agit de rocket man point set stop production. Donc je vais éclaircir ça. Et à ce stade, ça ne fait pas vraiment mal de recharger notre système, Damon. Donc, faisons le pseudo système CTL démon rechargement et le pseudo redémarrage du système. Gee, licorne. Maintenant, allons de l'avant et installons le moteur X. C'est vraiment, vraiment important parce que Engine X va être à peu près notre proxy vers et depuis G Unicorn. Nous allons avoir besoin de cela pour charger également tous nos fichiers statiques afin qu'il n'ait pas à passer par python parce que pour quelqu'un de frapper votre site Web et ensuite que cette requête passe par python toe, recherchez un fichier et ensuite servir que est beaucoup plus lent que de simplement laisser un service qui est exclusivement dédié à cela. Comme Engine X. Fais que ça marche. Donc, nous allons faire pseudo nano au moteur de mer X sites tiret disponible Rocketman slash. Ce fichier ne devrait pas exister à ce stade, et je viens de coller une config ici. Mais nous allons passer en revue ça donc il va chercher Écoutez le port 80. C' est votre standard, Http ou votre port de site Web va écouter à nouveau. Rapport 80 Et ici le nom du serveur est mon adresse. Je vais aussi mettre ici mon adresse finale I P ou mon domaine final, pas I p adresse. Alors, Rocket Man, n'apprends pas comment pointer com. Je vais mettre un journal d'erreur ici, donc il va se connecter directement dans mon projet en tant que moteur X tableau de bord d'air journal J'ai dit l' emplacement du tissu sur j'ai dit les actifs statiques. Encore une fois, cela revient à passer. Donc je suis toujours dans le répertoire personnel. J' utilise l'utilisateur Caleb et mon projet. Mon dossier dans mon dossier qui contient mon projet s'appelle Rock It, Man. Et quand nous avons collecté statique, il a créé un dossier pour nous appelé Static. Et donc c'est vraiment juste de créer un alias. Donc, quand vous allez sur votre site Web dot com barre oblique statique point PNG est en fait dire , Hey, que l'image , Hey, d'un PNG ne vit pas seulement dans un dossier statique. Il vit dans ce dossier statique exact. Et vos médias sont l'endroit où tous vos médias seront téléchargés avec un projet wag tail. Et puis chaque fois que vous frappez une page, votre page d'accueil vraiment ici, les yeux vont inclure des paramètres proxy et va passer cette chaussette de points G licorne a déposé ce fichier que nous avons testé pour s'assurer qu'il existe disaient, Hé, passe le par là. Allons-y, Hit contrôle Oh, et contrôle X. Et encore une fois, si je vais un peu trop vite avec certains de ces trucs, vous pouvez toujours référencer ce code sur Wag tail dot com appris. Donc maintenant, nous devons créer un frère ici, et donc nous pouvons le faire avec le pseudo l N Dash s. Et puis cela vient juste du fichier Rocketman. C' est celui que nous avons ajouté ici, nous allons obtenir similaires etc sites Engine X activés. Donc, en gros, nous disons juste, Hey, le site est maintenant activé. Nous avons créé une config avant et maintenant nous disons que config est activé. Allons de l'avant et tester le moteur X avec pseudo moteur X Dashti Les choses regardaient bien et nous allons redémarrer le moteur X à ce point système CTO redémarrer le moteur X. Jusqu'à présent, pas de problèmes. On peut même le statut de dio et Yonex, on peut voir qu'il est en cours d'exécution maintenant. Ce point, si vous consultez votre site Web, des chances qu'il ne s'exécute pas. Et bien sûr, je rafraîchis la page. Et pourtant, il n'est pas encore en cours d'exécution. C' est bon. Nous avons encore quelques étapes à faire ici. Les premières choses d'abord. Nous devons supprimer notre port 8000 de vous, FW. Donc si on vous pseudo statut FW, on verra le Port 8000 et on va aller de l'avant et on s'en débarrasse parce qu'on n'en a pas besoin. Donc sudo vous supprimer FW, autoriser 8000 et c'est à nouveau le statut. Il n'est plus là maintenant. Nous devons autoriser le moteur X ici, cependant, cependant, donc pseudo vous FW permettre le moteur X plein et a remarqué les apostrophes autour de cela. Et si nous faisons le statut, vous devriez voir quelque chose qui ressemble à ceci. Maintenant, revenons à notre page. Et je vais juste me débarrasser de ce port 8000 parce que nous n'avons plus besoin de ça et vérifier . Nous avons des actifs statiques. Tout semble bien. Nous pouvons retourner à notre page d'accueil et je suis juste sur mon adresse i P maintenant. n'y a pas de contenu ici, donc il n'y a pas d'images, de texte ou quoi que ce soit. Mais hé, ça marche. Et si j'y vais, ajouter des hommes. Tout fonctionne ici. Et testons simplement que le débogage est désactivé en allant à la page 40404044 introuvable ou cette page est introuvable. Si vous voyez la page jaune régulière que vous voyez, modèle Ali n'existe pas ou la page n'existe pas ou toute sorte d'erreur que vous voyez généralement avec le développement local de Django. Cela signifie que le débogage est toujours activé et que vous n'utilisez probablement pas vos paramètres de production. Et cela signifie que Django sert probablement toute une peur des actifs statiques, ce qui est lent et peu sûr. Tu ne veux pas ça. Mais pour nous, nous avons tout en marche comme nous voulions Teoh. Maintenant, j'étais la prochaine étape est de se débarrasser de cette adresse je p. Nous ne voulons pas que j'adresse là-bas du tout. Ce n'est plus 1985. Nous pouvons avoir un nom de domaine. Donc, euh, n'a pas vraiment d'importance avec qui votre domaine est enregistré. Le mien est enregistré auprès de Google et c'est donc juste le site Web waittil appris. Et si je vais dans DNS et encore, si vous êtes avec Go Daddy ou Cloudflare quelque chose comme ça, vous avez accès à votre DNS et ici dans mes enregistrements de ressources personnalisées, je veux juste mettre Rocket Man temps. Donnons-lui 10 minutes ou si vous utilisez Go Papa, je pense qu'ils font quelques secondes. Ça ferait 600 secondes pendant 10 minutes. Et j'ai mis mon adresse I p dedans. C' est mon serveur. Adresse I p 167172113119 Cliquez sur ajouter. Et d'habitude, ça dit quelque chose comme, ils entreront en vigueur dans les prochaines 48 heures. Mais généralement, les bureaux d'enregistrement AARP il assez vite Go. Papa est un peu lent, mais en général, ça arrive assez vite. Ensuite, nous allons vouloir nous assurer que cela est autorisé dans notre fichier de moteur X. Alors, où est-ce qui l'a fait ? Un pseudo nano, etc Engine X sites disponibles. Rocket Man, allons-y et débarrassez-vous de cette adresse. On n'en a plus besoin parce que j'utilise Rocket Man. N' apprenez pas comment point com maintenant, le DNS n'a peut-être pas encore lancé, donc je devrais peut-être attendre un peu, mais je sais que finalement ça va marcher ensuite, j'ai besoin de changer une chose de plus. Pseudo nano fusée paramètres, production de slash et je veux me débarrasser de cet astérisque ici. Si vous vouliez être plus sûr, vous pourriez mettre votre adresse i P là-dedans. Mais ce n'est pas vraiment nécessaire car il va accepter l'hôte local, qui est Engine X et aussi votre domaine. Donc le mien est Rocketman dot apprendre wag queue dot com. Le tien pourrait être super génial. Wag queue site dot com Allez-y, dites que. Et maintenant parce qu'on a changé à notre fusée et toi ensuite, choses qu'on a à faire et son prochain Dashti qui s'assureraient qu'on n'a pas de fautes de frappe ou quoi que ce soit là-dedans. Pseudo système CTL redémarrer le moteur X et pseudo système redémarrer G licorne. Maintenant, si nous voulons revenir sur le serveur et dans rul nous avons l'adresse i p. Cela ne devrait plus fonctionner. Vous amène juste à la page moteur x, qui est exactement ce que vous devriez voir. Et si on va deux Rocket man, n'apprends pas Wag tail dot com Pour une raison quelconque, ça veut que j'utilise https. Nous n'avons pas https installé. Cependant, si vous voulez ajouter SSL, regardez certainement dans certains pots. Maintenant. Pour moi, c'est tout simplement une chose d'encaissement à mon navigateur en disant Hey, vous avez frappé le site avant. Il devrait avoir https dessus, mais ce n'est pas le cas actuellement. Donc, je viens d'ouvrir une nouvel