我需要实现一个类似于这样的结构:example.com/folder1/folder2/folder3/../ view(最后可以有其他东西而不是“view”)
这个结构的深度是未知的,在树的深处可能有一个文件夹。获得这个确切的 URL 模式是必不可少的,即我不能只去example.com/folder_id
关于如何使用 Django URL 调度程序实现这一点的任何想法?
我需要实现一个类似于这样的结构:example.com/folder1/folder2/folder3/../ view(最后可以有其他东西而不是“view”)
这个结构的深度是未知的,在树的深处可能有一个文件夹。获得这个确切的 URL 模式是必不可少的,即我不能只去example.com/folder_id
关于如何使用 Django URL 调度程序实现这一点的任何想法?
Django 的 url 调度程序基于正则表达式,因此您可以为其提供与您想要的路径匹配的正则表达式(带有重复组)。但是,我找不到让 django 的 url dispatcher 匹配多个子组的方法(它只返回最后一个匹配作为参数),所以一些参数处理留给视图。
这是一个示例 url 模式:
urlpatterns = patterns('',
#...
(r'^(?P<foldersPath>(?:\w+/)+)(?P<action>\w+)', 'views.folder'),
)
在第一个参数中,我们有一个非捕获组,用于重复“word”字符后跟“/”。也许您想将 \w 更改为其他字符以包含字母和数字以外的其他字符。
您当然可以在 url 配置中将其更改为多个视图,而不是使用 action 参数(如果您的操作集有限,这更有意义):
urlpatterns = patterns('',
#...
(r'^(?P<foldersPath>(?:\w+/)+)view', 'views.folder_View'),
(r'^(?P<foldersPath>(?:\w+/)+)delete', 'views.folder_delete'),
)
在视图中,我们拆分第一个参数以获取文件夹数组:
def folder(request, foldersPath, action):
folders = foldersPath.split("/")[:-1]
print "folders:", folders, "action:", action
#...