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 zuerstOhne 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.
Aufgabe
EinfachFüge die Jobseite mit der fertigen Vorlage jobs/job_list.html hinzu, die über jobs iteriert.
- Füge in
jobs/views.pyJobListViewhinzu, eineListViewfürJob. Nenne die Listejobs, sortiere nach dem neuestenposted-Datum zuerst und behalte die Standardvorlage bei. - Füge in
jobs/urls.pydie Route"jobs/"mit dem Namenlisthinzu.
Ö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