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 de bord a besoin d’une page qui répertorie tous les postes. Une liste des lignes d’un tableau est si courante que Django a créé la vue : ListView. Indiquez-lui un modèle : elle interroge les lignes et les affiche dans un modèle. Voici 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, la vue affiche recipes/recipe_list.html : le libellé de l’application, le nom du modèle en minuscules, puis _list.html. Les lignes sont accessibles sous les noms object_list et recipe_list, ou sous le nom indiqué dans context_object_name.

ordering accepte les mêmes valeurs que order_by() ; ainsi, ["-minutes"] placerait la recette la plus longue en premier. Sans cela, les lignes sont renvoyées dans l’ordre de la base de données.

challenge icon

Défi

Facile

Ajoutez la page des offres d’emploi. Son modèle, jobs/job_list.html, est prêt et parcourt jobs.

  • Dans jobs/views.py, une JobListView, une ListView de Job, avec la liste nommée jobs et la date posted la plus récente en premier. Conservez le modèle par défaut.
  • Dans jobs/urls.py, une route "jobs/" nommée list.

Cliquez sur Run et ouvrez /jobs/.

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