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.
Desafío
FácilCambia las páginas de empleos para que usen slugs en lugar de ids.
- En
jobs/urls.py, haz que la rutadetailreciba el slug del empleo en lugar de su pk. - 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