Jon*_*Jon 2 django django-urls django-views
我想知道 Django 中是否有一种方法可以让 url 允许在 / 之后有多个参数,其中参数的数量是可变的。
这是我的意思的一个例子:
因此,如果我有一个名为“关于我们”的页面,其网址为 /page/about_us,那么我有一个从“关于我们”链接的页面,称为“联系信息”,它的网址是否为 /page/about_us/contact_info,其下可能有另一个页面,依此类推。
您将如何编写 URL 处理以允许 /page 后跟任意数量的其他页面,中间有斜杠?这似乎对于做面包屑之类的事情很有用,而且还可以使网址非常可读。我只是不知道如何制作正则表达式或视图,可以将路径中的可变页数作为参数。
最好只使用一个正则表达式来捕获 /page/ 之后的所有内容作为一个长参数,然后让视图通过在 / 处拆分来分解它?这样的正则表达式会是什么样子?我似乎无法在正则表达式中包含 / 而不出现问题。
使用 urls.py 执行此操作的一种方法是终止正则表达式$或观察 url 添加的顺序。
例如:
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'),
Run Code Online (Sandbox Code Playgroud)
会正常工作。所以会:
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'),
Run Code Online (Sandbox Code Playgroud)
但这不会让您到达 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'),
Run Code Online (Sandbox Code Playgroud)
在上一个示例中,如果您的网站位于,www.example.com并且您访问了,www.example.com/page/about_us/您将到达 about_us 视图。但是,如果您访问,www.example.com/page/about_us/contact_us/您仍然会到达 about_us 视图。这是因为如果您的正则表达式不以 结尾$,它将匹配以您的表达式开头的任何内容并重定向您。
url 会按顺序检查,因此,如果您确实省略了 url 的顺序,$并且适当地添加了 url 的顺序,您仍然会到达正确的页面,如第二个 url 块中所示。
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |