Menu
CoddyTech

Páginas por slug

Parte de la sección Vistas basadas en clases del Journey de Django de Coddy. Lección 6 de 18.

/jobs/7/ no dice nada sobre el empleo. /jobs/python-developer-brightline/ indica de qué se trata, tanto a las personas como a los motores de búsqueda. Esa parte legible es un slug: palabras en minúsculas unidas por guiones. Cada Job ya tiene uno en su campo slug.

Cuando el argumento de la URL se llama slug, una DetailView encuentra la fila cuyo campo slug coincide. Se pueden cambiar ambos nombres. Una página de recetas cuya ruta es "recipes/<slug:recipe_slug>/" le indica a la vista:

class RecipeDetailView(DetailView):
    model = Recipe
    slug_url_kwarg = "recipe_slug"

slug_url_kwarg indica el nombre del argumento de la URL y slug_field el del campo del modelo; ambos tienen "slug" como valor predeterminado. Si cambias el nombre del argumento de la URL sin avisarle a la vista, esta no encuentra ni un pk ni un slug y falla.

challenge icon

Desafío

Fácil

Cambia las páginas de empleos para que usen slugs en lugar de ids.

  1. En jobs/urls.py, haz que la ruta detail reciba el slug del empleo en lugar de su pk.
  2. En job_list.html, haz que cada enlace pase el slug del empleo.

Haz clic en Python Developer en /jobs/: la dirección es /jobs/python-developer-brightline/.

Pruébalo tú mismo

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"),
]

Todas las lecciones de Vistas basadas en clases

Practica por tu cuenta: Playground de Django