Pages par slug
Fait partie de la section Vues basées sur des classes du Journey Django de Coddy. Leçon 6 sur 18.
/jobs/7/ ne dit rien sur l’offre d’emploi. /jobs/python-developer-brightline/ indique ce qu’elle contient, aux personnes comme aux moteurs de recherche. Cette partie lisible est un slug : des mots en minuscules reliés par des traits d’union. Chaque Job en possède déjà un dans son champ slug.
Lorsque l’argument d’URL s’appelle slug, une DetailView trouve la ligne dont le champ slug correspond. Les deux noms peuvent changer. Un site de recettes dont la route est "recipes/<slug:recipe_slug>/" indique à la vue :
class RecipeDetailView(DetailView):
model = Recipe
slug_url_kwarg = "recipe_slug"slug_url_kwarg désigne l’argument d’URL et slug_field le champ du modèle ; les deux prennent par défaut la valeur "slug". Renommez l’argument d’URL sans en informer la vue, et elle ne trouve ni pk ni slug et plante.
Défi
FacileFaites passer les pages d’offres d’emploi des identifiants aux slugs :
- Dans
jobs/urls.py, la routedetailprend le slug de l’offre d’emploi au lieu de sa clé primaire. - Dans
job_list.html, chaque lien transmet le slug de l’offre d’emploi.
Cliquez sur Exécuter, puis sur Python Developer dans /jobs/ : l’adresse est /jobs/python-developer-brightline/.
Essayez vous-même
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"),
]
Toutes les leçons de Vues basées sur des classes
Entraînez-vous par vous-même : Playground Django