如何在Django urls.py中使用slug配置类别,子类别和帖子?

时间:2016-06-13 21:10:32

标签: python django

我需要像这样配置Django网址:

/<slug_category>/
/<slug_category>/<slug_sub_category>/
/<slug_category>/<slug_post>/

我试过这个。问题是/<slug_category>/<slug_sub_category>//<slug_category>/<slug_post>/会产生冲突。

urlpatterns = [
    url(r'^(?P<category_slug>[\w-]+)$', views.category),  
    url(r'^(?P<category_slug>[\w-]+)/(?P<slug_subcategory>[\w-]+)/$', views.category), 

    url(r'^(?P<category_slug>[\w-]+)/(?P<post_slug>[\w-]+)/$', views.post),
]

有可能吗?有人能帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不能使用两个不同的URL,因为它们具有相同的模式(正如评论中指出的那样)。解决方案是使用相同的URL并相应地获取内容。例如

urlpatterns = [
    url(r'^(?P<category_slug>[\w-]+)$', views.category),  
    url(r'^(?P<category_slug>[\w-]+)/(?P<slug_subcategory>[\w-]+)/$', views.cat_or_post), 

]

然后你有一个试图获取帖子的函数,如果失败则将它传递给views.category。像这样:

def cat_or_post(request,category_slug,slug_subcategory):
    try:
        post = Post.objects.get(slug=slug_subcategory)
        # put the rendering code here
     except Post.DoesnotExist:

        return category(request,category_slug,slug_subcategory)