2013-02-06 42 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

相關問題