【问题标题】:Django URLs - How to pass a list of items via clean URLs?Django URLs - 如何通过干净的 URLs 传递项目列表?
【发布时间】:2011-01-22 13:02:01
【问题描述】:

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

这个结构的深度未知,在树的深处可能有一个文件夹。获得这种准确的 URL 模式至关重要,即我不能只使用 example.com/folder_id

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

【问题讨论】:

    标签: django url django-urls nested-lists


    【解决方案1】:

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

    这是一个示例 url 模式:

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

    在第一个参数中,我们有一个非捕获组,用于重复“word”字符后跟“/”。也许您想将 \w 更改为其他字符以包含字母和数字以外的其他字符。

    您当然可以在 url 配置中将其更改为多个视图,而不是使用操作参数(如果您的操作集有限,这更有意义):

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

    【讨论】:

    • 刚刚注意到它重复了 stackoverflow.com/questions/249110/… ,但也许有人会发现这个正则表达式很有用。
    • 非常感谢。不幸的是,我在发布我的问题时找不到这个。正则表达式很棒,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2011-11-02
    • 2019-02-10
    • 2021-08-23
    • 2021-10-05
    • 2013-09-04
    相关资源
    最近更新 更多