Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

368
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!