django url 有两个 slug 冲突

django url with two slugs coflict

我有 urls.py

url(r'^(?P<slug>.+)/$', page, name='page'),
url(r'^(?P<slug1>.+)/(?P<slug2>.+)/$', subpage, name='subpage'),

页面和子页面是两个不同模型中的两个函数。

在我的 app1/views.py

def page(request, slug):
    try :
       #some code
    except myModel.DoesNotExist:
       return HttpResponseNotFound('<h1>not found</h1>')

和我app2/views.py

def page(request, slug1, slug2):
    try :
       #some code
    except myModel.DoesNotExist:
       return HttpResponseNotFound('<h1>not found</h1>')

问题是我没有得到子页面!

如果我将网址更改为

url(r'^AAAA(?P<slug>.+)/$', page, name='page'),
url(r'^BBBB(?P<slug1>.+)/(?P<slug2>.+)/$', subpage, name='subpage'),

一切顺利!

我该如何解决?

不要在正则表达式中使用 . +。它将匹配所有字符,包括斜杠。通常,您会使用 [-\w]+,它匹配字母 a-z 和 A-Z、数字 0-9、连字符和下划线。

url(r'^(?P<slug>[-\w]+)/$', page, name='page'),
url(r'^(?P<slug1>[-\w]) /(?P<slug2>[-\w]+)/$', subpage, name='subpage'),