2011-07-07 3 views
1

私はJinja2を使用して、input_1、input_2などの可変数の入力を持つフォームを生成しています。Google App Engine(Python)を使用して、これらの入力は、self.request.args.get()を使用して私の要求ハンドラにあります。Pythonで未知のクエリ引数にアクセスする

ただし、フォームによって生成される入力の数に応じて、スクリプトは複数の変数を読み取る必要があります。スクリプトはそこにどれくらいの数があるかを知っているので、forループ内のある種の変数変数を使ってそれらをすべて効率的に読み取る方法が問題になります。

私は後だものの種類は、概念的に、このようなものです:

for x in total_inputs: 
    list.append(input_x) 

私はもちろんif文だけの入力の異なる数のために使用し、手動で変数名を行うが、それはとても不格好と思われる可能性 - 確かに良い方法がありますか?

感謝

+0

質問を明確にすることはできますか?私は@Hyperboreusの答えをdownvoted誰かを参照してくださいが、私もあなた/彼女がしたようにあなたの質問を理解していただろう...? – mac

+0

また、タイトルから「不明な変数名」と言っていますが、 'self.request.args.get()'は何を返しますか?あなたが困っているコードの[SSCCE](http://sscce.org/)の例を投稿できますか? – mac

+0

@mac 20kb?あなたのリンクはStack Overflowのオーダーの大きさではないと思います。そして、彼が求めていることは、文脈上、私にとって完全にはっきりしているようです。 –

答えて

4

文字列フォーマットでこれを行うことができます。

num = 5 
tag = 'input_%d' % num 

だからすべてinput_xタグの値のリストを組み立てるために、あなたはこのような何かを行うことができ:これは想定してい

input_values = [] 
for i in range(1, number_of_values + 1): 
    input_values.append(self.request.get('input_%d' % i)) 

あなたが取得するために、どのように多くの価値を知っています。あなたの質問には前提がありますが、そうでない場合は、空の文字列(存在しないラベルのデフォルト戻り値はrequest.get)が得られるまで結果を反復処理できます。

編集:上記のコメントは、あなたがwebappを使用していることを前提としています。他のフレームワークでは、getを呼び出していない引数があり、デフォルトが指定されていない場合は、KeyErrorが返されます。

+0

OPは、パラメータがinput_1、input_2などとラベル付けされていると述べています。範囲(number_of_values)を反復処理します。これはオフ・バイ・ワン・エラーにつながりませんか? – Hyperboreus

+0

@Hyperboreusはい、修正されました。だが、フェンスポストのエラーに対して、答え全体を投票するのは少し失礼だ。 –

+0

これは正しい方法です – systempuntoout

0
for x in total_inputs: list.append (locals() ['input_%d' % x]) 

か、値としてキーとその値として変数名を持つ辞書たい場合:ここで

vars = {}  
for x in total_inputs: vars ['input_%d' % x] = locals() ['input_%d' % x] 

のpython2.6でいくつかの作業例:

>>> input_0 = 'a' 
>>> input_1 = 4 
>>> input_2 = None 
>>> for x in range (3): print locals() ['input_%d' % x] 
... 
a 
4 
None 
>>> 
+0

ローカルはここでは関係ありません。 –

+0

申し訳ありませんが、私は質問の名前が「Pythonで未知の変数名にアクセスする」ことを認識しました。今私は混乱の原因を理解しています。より適切なタイトルを編集しました。 –

関連する問題