gpt4 book ai didi

django - 如何在 django 中对所有 url 使用 slug 而不需要之前或之后的任何内容?

转载 作者:行者123 更新时间:2023-12-02 18:25:16 24 4
gpt4 key购买 nike

我希望所有 djaango url 默认情况下都使用 slug 字段,前后不带任何参数只有一个 url 可以使用此方法

View .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

url.py

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

这是我的 django 博客代码,我不想在网址中写文章或类别 & ...,只需 slug

mysite.com/article-slug...mysite.com/category-slug

最佳答案

它将始终触发 Article View ,无论该 slug 是否有 Article。因此,您应该使 URL 模式不重叠,以便可以触发其他 View ,例如:

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

如果您想要一个接受单个 slug 的路径,则应该定义一个 View ,用于查看是否存在带有该 slug 的 Article,如果不是,则查看 Category code> 如果 Product 不是这种情况,那么您可以在 View 中实现该逻辑,而不是在 URL 模式中。

关于django - 如何在 django 中对所有 url 使用 slug 而不需要之前或之后的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70316351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com