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)?