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 zuerstOhne 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.
Aufgabe
EinfachFüge die Jobseite hinzu. Die Vorlage jobs/job_list.html ist fertig und durchläuft jobs.
- Erstelle in
jobs/views.pyeineJobListView, eineListViewfürJob, mit der Liste namensjobsund dem neuestenposted-Datum zuerst. Behalte die Standardvorlage bei. - Füge in
jobs/urls.pyeine Route"jobs/"mit dem Namenlisthinzu.
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