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 premierSans 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.
Défi
FacileAjoutez la page des offres d’emploi. Son modèle, jobs/job_list.html, est prêt et parcourt jobs.
- Dans
jobs/views.py, uneJobListView, uneListViewdeJob, avec la liste nomméejobset la datepostedla plus récente en premier. Conservez le modèle par défaut. - Dans
jobs/urls.py, une route"jobs/"nomméelist.
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