IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriel pour apprendre à utiliser le framework web Django


précédentsommairesuivant

XVIII. Données dynamiques dans les templates

Nous avons différents morceaux en place : le modèle Post qui est défini dans le fichier models.py, la vue post_list dans views.py et nous venons de créer notre template. Mais comment allons-nous faire pour faire apparaître nos articles dans notre template HTML ? Car finalement, n'est-ce pas le but que nous souhaiterions atteindre ? Nous aimerions prendre du contenu, en l'occurrence notre modèle sauvegardé dans notre base de données, et réussir à joliment l'afficher dans notre template.

C'est à ça que servent les vues : connecter les modèles et les templates. Dans notre vue post_list, nous allons avoir besoin de prendre les modèles dont nous avons besoin et de les passer au template. Concrètement, c'est dans la vue que nous allons décider ce qui va s'afficher (modèle) dans un template.

OK, et sinon, on fait comment ?

Nous allons avoir besoin d'ouvrir le fichier blog/views.py. Pour l'instant, la vue post_list ressemble à ceci :

 
Sélectionnez
1.
2.
3.
4.
from django.shortcuts import render

def post_list(request):
    return render(request, 'blog/post_list.html', {})

Est-ce que vous vous souvenez de comment rajouter des morceaux de code écrits dans d'autres fichiers ? Nous en avons parlé dans un chapitre précédent. Nous allons devoir importer notre modèle qui est défini dans le fichier models.py. Pour cela, nous allons ajouter la ligne from .models import Post de la façon suivante :

 
Sélectionnez
from django.shortcuts import render
from .models import Post

Le point après from signifie le dossier courant ou l'application courante. Comme views.py et models.py sont dans le même dossier, nous pouvons tout simplement utiliser . et le nom du fichier, sans le .py. Ensuite, nous importons le modèle (Post).

OK, et après ? Afin de pouvoir aller chercher les véritables articles de blog de notre modèle Post, nous avons besoin de quelque chose qui s'appelle un QuerySet.

XVIII-A. QuerySet

Normalement, ce mot doit vous évoquer quelque chose. Nous en avons un peu parlé dans la section Django ORM (QuerySets)Django ORM (Querysets).

Maintenant, nous allons nous intéresser à une liste d'articles qui sont publiés et classés par date de publication (published_date). Ça tombe bien, on a déjà fait ça dans la section sur les QuerySets !

 
Sélectionnez
Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')

Il ne nous reste plus qu'à mettre cette ligne de code à l'intérieur de notre fichier blog/views.py, dans la fonction def post_list(request) :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
from django.shortcuts import render
from django.utils import timezone
from .models import Post

def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
    return render(request, 'blog/post_list.html', {})

Veuillez noter que nous créons une variable pour notre QuerySet : posts. Considérez que c'est le nom de notre QuerySet. À partir de maintenant, nous allons pouvoir faire référence à notre QuerySet en utilisant ce nom.

Notez aussi que notre code utilise la fonction timezone.now() et que, par conséquent, nous allons aussi devoir importer timezone.

Il nous manque encore un petit quelque chose : passer notre QuerySet posts à notre template. Nous nous intéresserons plus particulièrement à celui-ci dans la section suivante.

Dans la fonction render, nous avons déjà un paramètre request, qui désigne tout ce que nous recevons d'un utilisateur par l'intermédiaire d'Internet, et un fichier template appelé 'blog/post_list.html'. Le dernier paramètre, qui ressemble à {}, va nous permettre de glisser des instructions que notre template va suivre. Nous avons besoin par exemple de lui donner des noms : nous allons rester sur 'posts' pour le moment. Ça va ressembler à ça : {'posts': posts}. La partie située avant: est une chaîne de caractères : vous devez donc l'entourer de guillemets ''.

Finalement, notre fichier blog/views.py doit maintenant ressembler à ceci:

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
from django.shortcuts import render
from django.utils import timezone
from .models import Post

def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
    return render(request, 'blog/post_list.html', {'posts': posts})

Et voilà, c'est bon ! Nous allons retourner du côté de notre template pour que notre QuerySet puisse s'afficher correctement !

Si vous voulez en savoir plus sur les QuerySets, n'hésitez pas à consulter la documentation officielle du framework : https://docs.djangoproject.com/fr/1.10/ref/models/querysets/


précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Django Girls et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2018 Developpez.com.