2016-06-13 57 views
1

我需要配置Django的网址是这样的:如何在Django的urls.py中配置类别,子类别和帖子?

/<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), 
] 

有没有可能这样做?有人能帮我吗?

谢谢!

+2

它们具有相同的正则表达式结构,你可以尝试使用类似:'类/ /后/ ' – Gocht

+0

是@Gotch。感谢您的帮助!但不幸的是,该网站已经存在(在WordPress的),我想保持相同的网址结构。 –

+0

你试过我的回答吗? – e4c5

回答

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) 
+0

谢谢@ e4c5!我认为这是最好的选择!但必须确保slug_subcategory和slug_post不相等。 –

+0

是的,就是这样,但通常单词按自动生成后slu are相当长,因为类别slu are短。所以这不太可能造成问题 – e4c5