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 premierSans 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.
Défi
FacileAjoutez la page des offres d’emploi, avec le modèle prêt à l’emploi jobs/job_list.html, qui parcourt jobs.
- Dans
jobs/views.py, ajoutezJobListView, uneListViewdeJob. Nommez sa listejobs, placez la datepostedla plus récente en premier et conservez le modèle par défaut. - Dans
jobs/urls.py, ajoutez la route"jobs/"nomméelist.
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