Django urls 匹配错误模式的多个参数
Django urls multiple parameters matching to wrong pattern
我的目标是创建一个 url 结构,其中简单地输入 mywebsite.com/apple/
将 return c_one
,而输入 mywebsite.com/apple/homepage
将 return c_two
与 company=apple
和 pagetype=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')
我的目标是创建一个 url 结构,其中简单地输入 mywebsite.com/apple/
将 return c_one
,而输入 mywebsite.com/apple/homepage
将 return c_two
与 company=apple
和 pagetype=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')