Menu
CoddyTech

ListView

Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 4 sur 18.

Le tableau a besoin d’une page qui répertorie chaque tâche. Une liste des lignes d’une table est si courante que Django a créé la vue correspondante : ListView. Donne-lui un modèle : elle interroge les lignes et les affiche dans un gabarit. La liste d’un site de recettes, dans l’application recipes :

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # les plus rapides en premier

Sans template_name, elle affiche recipes/recipe_list.html : le nom de l’application, le nom du modèle en minuscules, puis _list.html. Le gabarit reçoit toujours les lignes sous le nom object_list. Il les reçoit aussi sous le nom recipe_list, ou, si tu définis context_object_name, sous ce nom à la place.

ordering accepte les mêmes arguments que order_by() : ainsi, ["-minutes"] placerait la recette la plus longue en premier. Sans cette option, les lignes arrivent dans l’ordre de la base de données.

challenge icon

Défi

Facile

Ajoutez la page des offres d’emploi, avec le modèle prêt à l’emploi jobs/job_list.html, qui parcourt jobs.

  1. Dans jobs/views.py, ajoutez JobListView, une ListView de Job. Nommez sa liste jobs, placez la date posted la plus récente en premier et conservez le modèle par défaut.
  2. Dans jobs/urls.py, ajoutez la route "jobs/" nommée list.

Ouvrez /jobs/ : Python Developer est en premier et Technical Writer est en dernier.

Essayez vous-même

from django.views.generic import TemplateView

from .models import Job


class HomeView(TemplateView):
    template_name = "jobs/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["count"] = Job.objects.count()
        context["latest"] = Job.objects.order_by("-posted").first()
        return context


class AboutView(TemplateView):
    template_name = "jobs/about.html"

Toutes les leçons de Vues basées sur des classes

Entraînez-vous par vous-même : Playground Django