相关疑难解决方法(0)

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

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

/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

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

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

python django django-urls

18
推荐指数
1
解决办法
5444
查看次数

标签 统计

django ×1

django-urls ×1

python ×1