Menu
CoddyTech

Seiten nach Slug

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

/jobs/7/ sagt nichts über den Job aus. /jobs/python-developer-brightline/ verrät sowohl Menschen als auch Suchmaschinen, worum es geht. Dieser lesbare Teil ist ein Slug: kleingeschriebene Wörter, die durch Bindestriche verbunden sind. Jedes Job hat bereits einen im Feld slug.

Wenn das URL-Argument slug heißt, findet eine DetailView den Datensatz, dessen Feld slug übereinstimmt. Beide Namen lassen sich ändern. Eine Rezeptseite, deren Route "recipes/<slug:recipe_slug>/" lautet, teilt der View Folgendes mit:

class RecipeDetailView(DetailView):
    model = Recipe
    slug_url_kwarg = "recipe_slug"

slug_url_kwarg bezeichnet das URL-Argument und slug_field das Modellfeld; für beide gilt standardmäßig "slug". Benennst du das URL-Argument um, ohne der View Bescheid zu geben, findet sie weder einen pk noch einen Slug und stürzt ab.

challenge icon

Aufgabe

Einfach

Stelle die Jobseiten von IDs auf Slugs um:

  • In jobs/urls.py verwendet die detail-Route den Slug des Jobs statt seiner Primärschlüssel-ID.
  • In job_list.html übergibt jeder Link den Slug des Jobs.

Klicke auf „Run“ und dann auf „Python Developer“ unter /jobs/: Die Adresse lautet /jobs/python-developer-brightline/.

Probier es selbst

from django.urls import path

from . import views

app_name = "jobs"

urlpatterns = [
    path("", views.HomeView.as_view(), name="home"),
    path("about/", views.AboutView.as_view(), name="about"),
    path("jobs/", views.JobListView.as_view(), name="list"),
    path("jobs/<int:pk>/", views.JobDetailView.as_view(), name="detail"),
]

Alle Lektionen in Klassenbasierte Views

Übe selbstständig: Django-Playground