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’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.

challenge icon

Défi

Facile

Remplacez les identifiants des pages d’offres d’emploi par des slugs.

  1. Dans jobs/urls.py, faites en sorte que la route detail utilise le slug de l’offre d’emploi au lieu de sa clé primaire.
  2. 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