L'objectif de ce petit tutoriel est de manier les vues et les urls de Django simplement. On créera une application nommée *hello* qui fournira une page affichant "Hello World" ainsi qu'une autre page qui affichera en plus un numéro qui sera récupéré depuis l'URL, le tout au milieu d'une page typique du Sith AE.
L'objectif de ce petit tutoriel est de prendre rapidement en main les vues, les urls et les modèles de Django. On créera une application nommée *hello* qui fournira une page affichant "Hello World", une autre page qui affichera en plus un numéro qui sera récupéré depuis l'URLainsiqu'une page affichant un élément récupéré de la base de données, le tout au milieu d'unepagetypiqueduSithAE.
Créerl'application
-------------------
...
...
@@ -49,13 +49,13 @@ Dans un premier temps, nous allons créer une vue qui vas charger un template en
#Toutelalogiquepourservirlavueetparserletemplate
#estdirectementhéritéedeTemplateView
classHelloView(TemplateView):
template_name = "hello.jinja" # On indique quel template utiliser
@@ -139,7 +139,7 @@ Enfin, on modifie le template en rajoutant une petite condition sur la présence
.. code-block:: html+jinja
{# hello/templates/hello.jinja #}
{# hello/templates/hello/hello.jinja #}
{% extends "core/base.jinja" %}
{% block title %}
...
...
@@ -154,3 +154,122 @@ Enfin, on modifie le template en rajoutant une petite condition sur la présence
{%- endif -%}
</p>
{% endblock content %}
.. note::
Il est tout à fait possible d'utiliserlesargumentsGETpassésdansl'URL. Dans ce cas, il n'estpasobligatoiredemodifierl'URL et il est possible de récupérer l'argumentdansledictionnaire`request.GET`.
Àl'assaut des modèles
----------------------
Pour cette dernière partie, nous allons ajouter une entrée dans la base de donnée et l'afficherdansuntemplate.Nousallonsainsicréerunmodèlenommé*Article*quicontiendrauneentréedetextepourletitreetuneautrepourlecontenu.
{#Pardéfautunelisted'objets venant de ListView s'appelleobject_list#}
{%forarticleinobject_list%}
<h2>{{article.title}}</h2>
<p>{{article.content}}</p>
{%endfor%}
{%endblockcontent%}
Maintenantquetoutelalogiquederécupérationetd'affichage est terminée, la page est accessible à l'adressehttps://localhost:8000/hello/articles.
Mais,j'ai une erreur ! Il se passe quoi ?! Et bien c'estsimple,nousavonscréelemodèlemaisiln'existe pas dans la base de données. Il est dans un premier temps important de créer un fichier de migrations qui contiens des instructions pour la génération de celle-ci. Ce sont les fichiers qui sont enregistrés dans le dossier migration. Pour les générer à partir des classes de modèles qu'onviensdemanipulerilsuffitd'une seule commande.
.. code-block:: bash
./manage.py makemigrations
Un fichier *hello/migrations/0001_initial.py* se crée automatiquement, vous pouvez même aller le voir.
.. note::
Il est tout à fait possible de modifier à la main les fichiers de migrations. C'esttrèsintéressantsiparexempleilfautappliquerdesmodificationssurlesdonnéesd'un modèle existant après cette migration mais c'estbienaudelàdusujetdecetutoriel.Référezvousàladocumentationpourcegenredechoses.
J'ai toujours une erreur ! Mais oui, c'estpasfini,fautpasallertropvite.Maintenantilfautappliquerlesmodificationsàlabasededonnées.
..code-block::bash
./manage.pymigrate
Etvoilà,làiln'y a plus d'erreur.Toutfonctionneetonaunesuperbepagevidepuisqueaucuncontenupourcettetablen'est dans la base. Nous allons en rajouter. Pour cela nous allons utiliser le fichier *core/management/commands/populate.py* qui contiens la commande qui initialise les données de la base de données de test. C'estunfichiertrèsimportantqu'on viendra à modifier assez souvent. Nous allons y ajouter quelques articles.
.. code-block:: python
# core/management/commands/populate.py
from hello.models import Article
...
class Command(BaseCommand):
...
def handle(self, *args, **options):
...
Article(title="First hello", content="Bonjour tout le monde").save()