当前位置:  开发笔记 > 编程语言 > 正文

Django:任意数量的未命名urls.py参数

如何解决《Django:任意数量的未命名urls.py参数》经验,为你挑选了1个好方法。

我有一个Django模型,包含大量字段和20000多个表行.为了方便人类可读的URL以及将大型列表分解为任意子列表的能力,我希望有一个如下所示的URL:

/browse///// .... etc ....

其中'name'映射到model属性,'value'是该属性的搜索条件.每个"名称"将被视为类别,以返回类别匹配的模型实例的子集.

现在,这可以用GET参数处理,但我更喜欢用户和搜索引擎更可读的URL.这些URL子集将嵌入显示此模型的每个页面上,因此制作漂亮的URL似乎是值得的.

理想情况下,每个名称/值对将作为名为name1,name2等的参数传递给视图函数.但是,我不相信可以通过正则表达式的匹配文本定义命名模式.我错了吗?

所以,似乎我需要做这样的事情:

urlpatterns = patterns('',
    url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)

看来这应该匹配任意两个名称/值对的集合.虽然它成功匹配,但它只将最后一个名称/值对作为参数传递给视图函数.我的猜测是每场比赛都会覆盖上一场比赛.在包含(?:...)+导致它的猜测下,我尝试了一个简单的重复模式:

urlpatterns = patterns('',
    url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)

...并且遇到了同样的问题,但这次*args只包括最后匹配的模式.

这是Django的url调度程序和/或Python的正则表达式支持的限制吗?似乎这些方法中的任何一个都应该有效.有没有办法实现这一点,而无需将URL中的每个可能的模型属性硬编码为可选(.*)模式?



1> Adam..:

您可能考虑的可能性是匹配网址图案部分中的整个可能值字符串,并拉出视图中的特定部分.举个例子:

urlpatterns = patterns('',
    url(r'^browse/(?P.+)/$', 'app.views.view', name='model_browse'),
)

def view(request, match):
    pieces = match.split('/')
    # even indexed pieces are the names, odd are values
    ...

没有关于我使用的正则表达式的承诺,但我想你明白我的意思.

(编辑试图修复正则表达式.)


只是在我的情况下为其他人添加一些文本,这是我在[矩阵URI]中解析任意数量的矩阵元素的唯一解决方案(http://www.w3.org/DesignIssues/MatrixURIs. HTML).将所有矩阵元素匹配在一起,然后在视图中解析.
同样在这里,它是2016年
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有