Django urls 匹配错误模式的多个参数

Django urls multiple parameters matching to wrong pattern

我的目标是创建一个 url 结构,其中简单地输入 mywebsite.com/apple/ 将 return c_one,而输入 mywebsite.com/apple/homepage 将 return c_twocompany=applepagetype=homepage

但是,url mywebsite.com/apple/homepage returning c_one 并认为公司是 "apple/homepage"。

我的代码在下面,让我知道是否有任何方法可以让 urls 意识到如果使用斜线有两个变量。谢谢!

url(r'^c/(?P<company>[\w|\W]+)/$', views.c_one, name='c_one'),
url(r'^c/(?P<company>[\w|\W]+)/(?P<pagetype>[\w|\W]+)/$', views.c_two, name='c_two'),
url(r'^c/(?P<company>[\w|\W]+)/(?P<pagetype>[\w|\W]+)/(?P<topic>[\w|\W]+)/$', views.c_three, name='c_three')

问题出在你对模式的定义上。

同时使用 \w\W 你基本上是在说 任何给定的字符 .

根据Wikipedia\w的定义是[A-Za-z0-9_]\W的定义是[^A-Za-z0-9_]。基本上 \W\w 的补码,所以你匹配任何字符。

像这样修改您的配置,它应该可以工作:

url(r'^c/(?P<company>\w+)/$', views.c_one, name='c_one'),
url(r'^c/(?P<company>\w+)/(?P<pagetype>\w+)/$', views.c_two, name='c_two'),
url(r'^c/(?P<company>\w+)/(?P<pagetype>\w+)/(?P<topic>\w+)/$', views.c_three, name='c_three')