Django URL - 如何通过干净的URL传递项目列表?

let*_*osh 5 django url django-urls nested-lists

我需要实现一个类似于这样的结构:example.com/folder1/folder2/folder3/../ view(最后可以有其他东西而不是"view")

这个结构的深度是未知的,并且可以在树内深处埋藏一个文件夹.获得这个确切的URL模式至关重要,即我不能只去example.com/folder_id

有关如何使用Django URL调度程序实现此功能的任何想法?

Ami*_*obo 5

Django的url调度程序基于正则表达式,因此你可以为它提供一个匹配你想要的路径(带有重复组)的正则表达式.但是,我找不到让django的url调度程序匹配多个子组的方法(它只返回最后一个匹配作为参数),因此一些参数处理留给视图.

这是一个示例url模式:

urlpatterns = patterns('',
    #...
    (r'^(?P<foldersPath>(?:\w+/)+)(?P<action>\w+)', 'views.folder'),
)
Run Code Online (Sandbox Code Playgroud)

在第一个参数中,我们有一个非捕获组,用于重复"单词"字符后跟"/".也许您想要将\ w更改为包含除字母和数字之外的其他字符.

您当然可以将其更改为url配置中的多个视图,而不是使用action param(如果您有一组有限的操作,则更有意义):

urlpatterns = patterns('',
    #...
    (r'^(?P<foldersPath>(?:\w+/)+)view', 'views.folder_View'),
    (r'^(?P<foldersPath>(?:\w+/)+)delete', 'views.folder_delete'),
)
Run Code Online (Sandbox Code Playgroud)

在视图中,我们拆分第一个参数以获取文件夹的数组:

def folder(request, foldersPath, action):
    folders = foldersPath.split("/")[:-1]
    print "folders:", folders, "action:", action
    #...
Run Code Online (Sandbox Code Playgroud)