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

时间:2010-03-02 00:40:01

标签: django url django-urls nested-lists

我需要实现类似这样的结构: example.com/folder1/folder2/folder3 /../ view (最后可能还有其他东西而不是“视图”)< / p>

此结构的深度未知,并且可能有一个深埋在树内的文件夹。获得这种确切的网址格式至关重要,即我不能只选择 example.com/folder_id

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

1 个答案:

答案 0 :(得分:5)

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

以下是一个示例网址模式:

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

在第一个参数中,我们有一个非捕获组,用于重复“单词”字符,后跟“/”。也许你想要改变\ w以包含除字母和数字之外的其他字符。

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

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
    #...