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 ist so üblich, dass Django die View dafür geschrieben hat: ListView. Gib ihr ein Modell, und sie fragt die Zeilen ab und rendert damit ein Template. Die Liste einer Rezept-Website 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, der Name des Modells in Kleinbuchstaben, dann _list.html. Das Template erhält die Zeilen immer als object_list. Außerdem erhält es sie als recipe_list oder, wenn du context_object_name festlegst, stattdessen unter diesem Namen.

ordering akzeptiert dieselben Werte wie order_by(), daher würde ["-minutes"] das langsamste Rezept zuerst anzeigen. Ohne diese Angabe werden die Zeilen in der Reihenfolge der Datenbank zurückgegeben.

challenge icon

Aufgabe

Einfach

Füge die Jobseite mit der fertigen Vorlage jobs/job_list.html hinzu, die über jobs iteriert.

  1. Füge in jobs/views.py JobListView hinzu, eine ListView für Job. Nenne die Liste jobs, sortiere nach dem neuesten posted-Datum zuerst und behalte die Standardvorlage bei.
  2. Füge in jobs/urls.py die Route "jobs/" mit dem Namen list hinzu.

Öffne /jobs/: Python Developer steht an erster und Technical Writer an letzter Stelle.

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