7

残念ながら、同じ名前の複数のパラメーターを提供する URL を処理するために、既存の Pylons アプリケーションを変更する必要がある状況に陥っています。次のようなもの... domain:port/action?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の最初の値にアクセスする方法が見つかりませんでした。

この問題に関連する同様の質問を見つけましたが、PHP で解決しました:

これらの線に沿ったものは私にとってはうまくいくでしょうが、Pylons に適合する Python コードかもしれません。誰かが以前にこのようなことを扱ったことがありますか?

4

2 に答える 2

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')
于 2013-02-06T17:15:03.410 に答える
1

演習として、他の質問の PHP の Python でのレンダリング(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^$']]
于 2013-02-06T17:28:30.103 に答える