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.
Aufgabe
EinfachStelle die Jobseiten von IDs auf Slugs um:
- In
jobs/urls.pyverwendet diedetail-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