django urls可变数量的参数

时间:2011-04-03 02:52:40

标签: django django-views django-urls

我想知道在Django中是否有一种方法可以在/之后允许多个参数的URL,可变数量。

这是我的意思的一个例子:

所以,如果我有一个关于我们的页面,其中有一个url / page / about_us,那么我有一个关于我们的页面链接称为联系信息,它的网址是/ page / about_us / contact_info,它可能有另一个页面,等等。

如何编写URL处理以允许/ page后跟任意数量的其他页面之间的斜杠?这似乎对于做面包屑这样的事情很有用,也会使网址非常易读。我只是不知道如何制作正则表达式或一个可以将路径中的变量页面作为参数的视图。

最好只使用一个正则表达式来捕获/ page /之后的所有内容作为一个长参数然后让视图通过拆分/来分解它吗?这样的正则表达式会是什么样的?我似乎无法在没有问题的情况下在正则表达式中包含/。

1 个答案:

答案 0 :(得分:3)

使用urls.py执行此操作的一种方法是使用$终止正则表达式,或者查看添加网址的顺序。

例如:

url(r'^page/about_us/$', 'example.views.about_us', name='about_us'),
url(r'^page/about_us/contact_info/$', 'example.views.contact_info', name='contact_info'),
url(r'^page/about_us/contact_info/map/$', 'example.views.map', name='map'),

会正常工作。那会:

url(r'^page/about_us/contact_info/map/', 'example.views.map', name='map'),
url(r'^page/about_us/contact_info/', 'example.views.contact_info', name='contact_info'),
url(r'^page/about_us/', 'example.views.about_us', name='about_us'),

但这不会让您访问about_us页面以外的页面:

url(r'^page/about_us/', 'example.views.about_us', name='about_us'),
url(r'^page/about_us/contact_info/', 'example.views.contact_info', name='contact_info'),
url(r'^page/about_us/contact_info/map/', 'example.views.map', name='map'),

在上一个示例中,如果您的网站位于www.example.com,并且您转到www.example.com/page/about_us/,则会转到about_us视图。但是,如果您转到www.example.com/page/about_us/contact_us/,您仍会访问about_us视图。这是因为如果您的正则表达式没有以$结尾,它将匹配以您的表达式开头并重定向您的任何内容。

我们会按顺序检查网址,因此,如果您确实不使用$并且网址顺序相应添加,您仍会到达正确的网页,就像第二个网址一样。