Django url有更多参数

时间:2014-12-09 12:00:56

标签: django django-urls

我有两个Django网址定义:

1 - 第一个网址

url( r'^(?P<language>.*)/(?P<shop>.*)/(?P<brand>.*)/$', 'app.views.view_1' ),

例如:http://www.example.com/en/my-shop/my-brand/

2 - 第二个网址

url( r'^(?P<language>.*)/(?P<shop>.*)/(?P<brand>.*)/(?P<category>.*)/$', 'app.views.view_2' ),

例如:http://www.example.com/en/my-shop/my-brand/my-brand-category/

问题:当我调用FIRST网址时,django网址调度程序正确调用“app.views.view_1”视图。但是,当我调用SECOND网址时,网址调度程序会调用“app.views.view_1”视图,而不是调用“app.views.view_2”视图。

有什么问题?错误的正则表达式?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您的捕获组匹配任何字符,包括斜杠。您可以通过将更具体的一个放在首位来解决这个问题,但在任何情况下都要更好地约束它们:slugs的常见格式是字母数字字符加短划线。此外,您可能希望使用+而不是*,因为每个组至少需要一个字符。

r'^(?P<language>[\w-]+)/(?P<shop>[\w-]+)/(?P<brand>[\w-]+)/$'

和其他模式相同。