Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:任意数量的未命名URL.py参数_Python_Django_Django Urls - Fatal编程技术网

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

Python Django:任意数量的未命名URL.py参数,python,django,django-urls,Python,Django,Django Urls,我有一个Django模型,其中包含大量字段和20000多个表行。为了方便人们阅读URL并能够将大列表分解为任意子列表,我希望有一个如下所示的URL: /browse/<name1>/<value1>/<name2>/<value2>/ .... etc .... urlpatterns = patterns('', url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name=

我有一个Django模型,其中包含大量字段和20000多个表行。为了方便人们阅读URL并能够将大列表分解为任意子列表,我希望有一个如下所示的URL:

/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
urlpatterns = patterns('',
    url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
这似乎应该匹配两个名称/值对的任意集合。虽然它成功地匹配了它,但它只将姓氏/值对作为参数传递给view函数。我的猜测是,每个匹配都会覆盖上一个匹配。根据包含(?:)+的猜测,我尝试了一个简单的重复模式:

urlpatterns = patterns('',
    url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)
。。。得到了同样的问题,但这次
*args
只包含最后匹配的模式


这是Django的url调度程序和/或Python的正则表达式支持的限制吗?看来这两种方法都应该管用。有没有一种方法可以将URL中的每个可能的模型属性硬编码为可选的(.*)模式?

一种可能性,你可以考虑在URL模式部分内匹配整个可能的值串,并取出视图中的特定片段。例如:

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

def view(request, match):
    pieces = match.split('/')
    # even indexed pieces are the names, odd are values
    ...
urlpatterns=patterns(“”,
url(r“^browse/(?P.+)/$”,“app.views.view”,name='model_browse'),
)
def视图(请求、匹配):
碎片=匹配。拆分(“/”)
#名称为偶数索引项,值为奇数
...
没有关于我使用的regexp的承诺,但我想你明白我的意思


(编辑以尝试修复regexp。)

我同意Adam的观点,但我认为urls.py中的模式应该是:

... r'^browse/(?P<match>.+)/$' ...
。。。r“^browse/(?P.+)/$”。。。

“\w”将只匹配“word”字符,而“.”将匹配任何字符。

在阅读问题时,我得到了相同的答案


我相信model_browse视图是对查询参数进行排序并将其用作通用路由器的最佳方式。

我认为Adam的答案比我的解决方案更通用,但如果您喜欢在url中使用固定数量的参数,您也可以这样做:

/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
urlpatterns = patterns('',
    url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
下面的示例显示了如何通过输入
商店
的名称和
来获取某个地点一天的所有销售额

url.py

urlpatterns = patterns('',
    url(r'^baseurl/location/(?P<store>.+)/sales/(?P<year>[0-9][0-9][0-9][0-9])-(?P<month>[0-9][0-9])-(?P<day>[0-9][0-9])/$', views.DailySalesAtLocationListAPIView.as_view(), name='daily-sales-at-location'),
)
希望它能帮助任何人

致以最良好的祝愿


Michael

我有一个替代解决方案,它与前一个方案没有太大区别,但更为完善:

url(r'^my\u app/((list\/)(\w{1,})\/(\w{1,})\/(\w{1,3})\/){1,10})+$”

我使用了一个重复的regexp。为了不获取“不是有效的正则表达式:多次重复”,我将一个单词放在列表的开头

我仍在查看列表。但我想我会仔细检查一下。我还是说不清楚


我的2美分

我对正则表达式很在行,只是猜测而已,呵呵。谢谢,我同意这可能是处理这个问题最简单的方法。在我的情况下,在这里为其他人放一些文本,这是我找到的解析a中任意数量矩阵元素的唯一解决方案。将所有矩阵元素匹配在一起,然后将PARe在view.same这里,是2016年,我认为使用url本身实现“像GET query一样”键值参数有点难看,而且不是“真的”。@alex-除了url不可读之外,如果您有多个GET参数(如果有的话),搜索引擎可能不会索引您的所有内容。