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

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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
    #...

【讨论】:

刚刚注意到它重复了 ***.com/questions/249110/… ,但也许有人会发现这个正则表达式很有用。 非常感谢。不幸的是,我在发布我的问题时找不到这个。正则表达式很棒,谢谢。

以上是关于Django URLs - 如何通过干净的 URLs 传递项目列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Django urls.py 识别 url 中的 # (hash)?

Django 路由控制

如何在 Django 中使用来自 urls.py 的变量重定向 url 模式?

Django 路由 urls.py

django-3.url配置

如何在 Django urls.py 中将 url 参数传递给 reverse_lazy