Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

371
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda