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’emploi. /jobs/python-developer-brightline/ indique de quoi il s’agit, 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 de l’URL s’appelle slug, une DetailView trouve la ligne dont le champ slug correspond. Ces deux noms peuvent changer. Une route de site de recettes telle que "recipes/<slug:recipe_slug>/" indique à la vue :
class RecipeDetailView(DetailView):
model = Recipe
slug_url_kwarg = "recipe_slug"slug_url_kwarg désigne l’argument de l’URL et slug_field le champ du modèle ; les deux valent par défaut "slug". Renommez l’argument de l’URL sans en informer la vue : elle ne trouve ni pk ni slug et plante.
Défi
FacileRemplacez les identifiants des pages d’offres d’emploi par des slugs.
- Dans
jobs/urls.py, faites en sorte que la routedetailutilise le slug de l’offre d’emploi au lieu de sa clé primaire. - Dans
job_list.html, faites en sorte que chaque lien transmette le slug de l’offre d’emploi.
Cliquez sur Python Developer sur /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