Menu
CoddyTech

DetailView

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

Jeder Eintrag braucht eine eigene Seite: Finde die Zeile, zeige sie an und antworte mit 404, wenn es keine gibt. Das ist DetailView. Auf einer Rezept-Website:

class RecipeDetailView(DetailView):
    model = Recipe


# urls.py
path("recipes/<int:pk>/", views.RecipeDetailView.as_view(), name="recipe")

Ein DetailView liest den Primärschlüssel der Zeile aus dem URL-Argument namens pk und sucht die Zeile so, wie es get_object_or_404() tut. Das Template ist standardmäßig recipes/recipe_detail.html, und die Zeile kommt als object und als recipe an.

Der Name pk ist wichtig. Eine Route mit <int:id> übergibt der Ansicht ein Argument, nach dem sie nicht sucht, und die Seite stürzt mit einem AttributeError ab, der nach einem Objekt-Primärschlüssel oder einem Slug fragt.

Ein Link übergibt den Primärschlüssel der Zeile an den Routennamen: {% url 'recipes:recipe' recipe.pk %}.

challenge icon

Aufgabe

Einfach

Die Vorlage jobs/job_detail.html ist bereit. Gib jedem Job eine eigene Seite:

  • In jobs/views.py eine JobDetailView, eine DetailView für Job.
  • In jobs/urls.py eine Route "jobs/<int:pk>/" namens detail.
  • Mache in job_list.html den Titel jedes Jobs zu einem Link auf seine Seite.

Klicke auf Run, öffne /jobs/ und klicke auf einen Titel.

Probier es selbst

from django.views.generic import ListView, 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"


class JobListView(ListView):
    model = Job
    context_object_name = "jobs"
    ordering = ["-posted"]
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Klassenbasierte Views

Übe selbstständig: Django-Playground