如何从Pylons中的URL获取具有相同名称的多个参数?

时间:2013-02-06 17:06:22

标签: python url parameters pylons

所以不幸的是,我发现自己需要修改现有的Pylons应用程序以处理提供多个具有相同名称的参数的URL。像下面这样的东西...... 域:端口/动作c = 1&安培; V = 3和C = 4

通常以这种方式访问​​参数......

from pylons import request
c = request.params.get("c")
#or
c = request.params["c"]

这将在任何一种情况下返回“4”作为值,因为忽略除最后一个值之外的所有值似乎是这些情况下的标准行为。但我真正需要的是能够同时访问这两者。我试着打印出request.params并得到这样的东西......

NestedMultiDict([(u'c', u'1'),(u'v', u'3'),(u'c', u'4')])

我还没有找到一种方法来索引它,或者访问c的第一个值。

我找到了与此问题相关的similar question,但是使用PHP解决了这个问题:

这些方面的东西对我来说效果很好,但也许一些适合Pylons的Python代码。有没有人以前处理过这样的事情?

2 个答案:

答案 0 :(得分:8)

来自文档 - http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/glossary.html#term-multidict

  

multidict一个有序字典,每个键可以有多个值。将方法getall,getone,mixed,add和dict_of_lists添加到普通字典界面。请参见Multidict和pyramid.interfaces.IMultiDict。

所以请致电:

request.params.getall('c')

答案 1 :(得分:1)

作为练习,在other question中使用Python进行PHP渲染(还包括一个虚拟参数来说明需要进行url解码):

from urlparse import urlparse
from urllib import unquote

url = 'http://www.example.com/action?c=1&v=3&c=4&d=%3A%24%23%40%3D%3F%25%5EQ%5E%24'

url = urlparse(url)

params = url.query.split('&')
params = [ tuple(p.split('=')) for p in params ]
params = [ [unquote(p[0]), unquote(p[1])] for p in params ]

print params

# [['c', '1'], ['v', '3'], ['c', '4'], ['d', ':$#@=?%^Q^$']]