Menu
CoddyTech

ListView

Teil des Abschnitts Klassenbasierte Views der Django-Journey von Coddy. Lektion 4 von 18.

Das Board benötigt eine Seite, auf der alle Jobs aufgelistet sind. Eine Liste der Zeilen einer Tabelle kommt so häufig vor, dass Django die View dafür geschrieben hat: ListView. Gib ihr ein Modell, und sie fragt die Zeilen ab und rendert ein Template mit ihnen. Die Liste einer Rezeptwebsite in der App recipes:

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # die schnellsten zuerst

Ohne template_name rendert sie recipes/recipe_list.html: das App-Label, den kleingeschriebenen Namen des Modells, dann _list.html. Die Zeilen kommen als object_list und recipe_list an oder unter dem Namen in context_object_name.

ordering akzeptiert dieselben Werte wie order_by(), daher würde ["-minutes"] das langsamste Rezept an den Anfang setzen. Ohne diese Angabe kommen die Zeilen in der Reihenfolge der Datenbank.

challenge icon

Aufgabe

Einfach

Füge die Jobseite hinzu. Die Vorlage jobs/job_list.html ist fertig und durchläuft jobs.

  • Erstelle in jobs/views.py eine JobListView, eine ListView für Job, mit der Liste namens jobs und dem neuesten posted-Datum zuerst. Behalte die Standardvorlage bei.
  • Füge in jobs/urls.py eine Route "jobs/" mit dem Namen list hinzu.

Klicke auf „Run“ und öffne /jobs/.

Probier es selbst

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"

Alle Lektionen in Klassenbasierte Views

Übe selbstständig: Django-Playground