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 se llama 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 busca la fila cuyo campo slug coincide. Ambos nombres pueden cambiar. 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. Cambia el nombre del argumento de la URL sin indicárselo a la vista y esta no encontrará ni un pk ni un slug y fallará.
Desafío
FácilCambia las páginas de empleos para que usen slugs en lugar de identificadores:
- En
jobs/urls.py, la rutadetailrecibe el slug del empleo en lugar de su pk. - En
job_list.html, cada enlace pasa el slug del empleo.
Pulsa Run y 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