2013-02-06 46 views
7

因此,不幸的是我发现自己处于需要修改现有Pylons应用程序以处理提供具有相同名称的多个参数的URL的情况。像下面... 域:端口/动作c = 1个& V = 3 & C = 4如何从Pylons中的URL获取具有相同名称的多个参数?

常规参数进行访问这样...

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解决:

东西沿着这些路线将工作很适合我,但也许一些Python代码,将融入主塔。有没有人处理过这样的事情?

+0

感谢您修复格式!它并没有变成我明确的想法...... –

+1

纠正我,如果我错了,但多个KEY对象不能存在于同一个请求?这是违反所有定义的。 – Torxed

+0

你是说不应该有两个同名的参数吗?如果这是你的问题,我同意最佳做法可以避免它。但这并不是严格禁止的。例如,尝试在浏览器中输入此网址(https://www.google.com/search?q=one&q=two)。有两个查询参数,所以Google将它们合并为一个。这或多或少是我希望能够做到的。 –

回答

1

作为练习,在PHP的Python的渲染在other question(也包括虚拟参数说明了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^$']] 
+0

严格地说,我并没有将url作为字符串,尽管我已经完成了包含GET的所有请求,并且我可以将该url解析出来。这种方法似乎也是有效的,但在Pylons应用程序的上下文中稍微复杂一些。我会给它一个+1,希望它能帮助有类似问题的人。 –

+0

谢谢 - 我确实以相同的精神提出了自己的观点,正确的答案当然是Jon Clements所做的。 – gauden

相关问题