Menu
CoddyTech

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.

challenge icon

Défi

Facile

Faites passer les pages d’offres d’emploi des identifiants aux slugs :

  • Dans jobs/urls.py, la route detail prend 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