Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

369
Vistas
¿Cómo se puede usar slug para todas las URL en django sin nada antes o después?

Quiero que todas las URL de djaango usen el campo slug sin ningún parámetro antes o después, de manera predeterminada, solo una URL puede usar este método

Vistas.py

 class ArticleDetail(DetailView): def get_object(self): slug = self.kwargs.get('slug') article = get_object_or_404(Article.objects.published(), slug=slug) ip_address = self.request.user.ip_address if ip_address not in article.hits.all(): article.hits.add(ip_address) return article class CategoryList(ListView): paginate_by = 5 template_name = 'blog/category_list.html' def get_queryset(self): global category slug = self.kwargs.get('slug') category = get_object_or_404(Category.objects.active(), slug=slug) return category.articles.published() def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['category'] = category return context

urls.py

 urlpatterns = [ path('<slug:slug>', ArticleDetail.as_view(), name="detail"), path('<slug:slug>', CategoryList.as_view(), name="category"), ]

Estos son mis códigos de blog de django, no quiero escribir artículo o categoría &... en urls, solo slug

misitio .com/article-slug ... misitio .com/category-slug

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Siempre activará la vista del Article , independientemente de si hay un Article para ese slug. Por lo tanto, debe hacer que los patrones de URL no se superpongan de modo que las otras vistas puedan activarse, por ejemplo con:

 path(' article/ <slug:slug>/', Article.as_View(), name="articledetail"), path(' category/ <slug:slug>/', Category.as_View(), name="category"), path(' product/ <slug:slug>/', Product.as_View(), name="productdetail"),

Si desea una ruta que acepte un solo slug, debe definir una vista que busque si hay un Article con ese slug, si ese no es el caso, una Category y, si ese no es el caso, un Product , implemente esa lógica en la vista, no en los patrones de URL.

over 4 years ago · Santiago Trujillo Denunciar

0

@WillemVanOlsem tiene razón, tendrá que escribir una vista como esta:

 from django.http import HttpResponseNotFound def slug_router(request, slug): if Category.objects.filter(slug=slug).exists(): return CategoryList.as_view()(request, slug=slug) elif Article.objects.filter(slug=slug).exists(): return ArticleDetail.as_view()(request, slug=slug) else: return HttpResponseNotFound('404 Page not found')

Y luego

 urlpatterns = [ path('<slug:slug>', slug_router, name="slug"), ]

... si no me equivoco. Esta debería ser la esencia de esto. No probé este código, solo lo escribí aquí, así que avíseme si no funciona, lo ayudaré a solucionarlo.

Tenga en cuenta que tendrá preferencia si hay artículos con el mismo slug que algunas categorías.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda