2

私は Web プログラミングが初めてで、これが私の最初の SO の質問です。うまくいけば、正しい方法で質問しています。私は単純なアンケート作成者 (Google フォームやアンケート モンキーに似ています) を構築しており、ユーザーが質問にオプションを追加できる Web フォームを持っています。各オプションには、「ラベル」と「値」の 2 つのフィールドがあります。フォームは次のようになります。

    Option One
           ------------------           ------------------
    Label: |                |   Value:  |                |
           ------------------           ------------------

    Option Two
           ------------------           ------------------
    Label: |                |   Value:  |                |
           ------------------           ------------------
    ...
    ...
    ... // user can "add option" and additional "rows" will appear in the form

[ SUBMIT ]

次のような基本的な Web フォームを使用しました。

<form class="well form" action="/submitform" method="post">
  <p><input type="text" name="label_1">
     <input type="text" name="value_1"></p>
  <p><input type="text" name="label_2">
     <input type="text" name="value_2"></br></p>
  <p>...   // and so forth, to support n sets of two fields
     ...
     ...
  <button type="submit">Submit</button>
</form>

request.form を正常に取得し、辞書内の各変数にアクセスできます。しかしもちろん、それは単一のフラット dict です。

[{'label_1': 'labelone', 'value1': 'valueone', 'label_2': 'label two'}]

など。次のような辞書のリストが必要です。

[ {'label': 'labelone', 'value': 'valueone'}, {'label': 'labeltwo', 'value': 'valuetwo'}]

これを行うためのハックな方法をいくつか考えましたが、いずれもフォーム オプションの数と種類をあらかじめ知っておく必要があります。もっと柔軟な解決策を見つけたいと思います。

ここでベストプラクティスはありますか?多くのサイトがこのようなことを行っているので、私が見逃しているベスト プラクティスがあると思います。

4

3 に答える 3

0

おそらくhtml配列?(正式名称は知りません)getlist

<p><input type="text" name="user_label[0]">
     <input type="text" name="user_value[0]"></p>
  <p><input type="text" name="user_label[1]">
     <input type="text" name="user_value[1]"></br></p>

私はこれが次のようなことができると考えています

request.form.getlist('user_label')
request.form.getlist('user_value')

それらを一緒に圧縮して、ペアを作成できますlables: values

私はフラスコでこれをテストしていません

于 2012-12-29T19:09:54.717 に答える
0

これはどうですか?

l = [{'label_1': 'labelone', 'value_1': 'valueone', 'label_2': 'label two', 'value_2':'v2'}]

values = int(len(l[0])/2)
dicts = []
for i in range(values):
    label_name = 'label_%s' % (i+1)
    value_name = 'value_%s' % (i+1)
    dicts.append({'label':l[0][label_name], 'value':l[0][value_name]})
于 2012-12-29T19:19:37.953 に答える