0

Python
を使用して Web アプリケーションを作成する方法を学んでいます。色 (ドロップダウン メニュー) と数値 (テキスト入力フィールド) を求める単純なフォームをユーザーに提示しています。
番号が無効な場合は、ユーザーにフォームを再度表示して番号を編集できるようにしたいのですが、選択した色は選択したままにしておきたいです。
これはフォームコードです:

<form method="post">
Choose a color and a number between 1 and 100.
<br>
<label>Color
<select name="color">
<option>red</option>
<option>blue</option>
<option>green</option>
<option>yellow</option>
</select>
</label>
<label>Number<input name="number" value="%(number)s"></label>
<div>%(error)s</div>
<br>
<br>
<input type="Submit">
</form>

文字列置換を使用して、ユーザーが入力した数字を表示することができましたが、colorフィールドは (もちろん) 常に赤にリセットされます。ユーザーがドロップダウンで選択したデータを保存するスマートな方法はありますか?
HTML キーワードを考えていselectedますが、それを適切なオプションに入れるにはどうすればよいですか?

4

1 に答える 1

0

文字列フォーマットを使用しているようです%Jinja2のようなものを使用することをお勧めしますが、そうしなくても、次のような方法で目的を達成できます。

html = '''stuff here
<label>Color
<select name="color">
%(colors)s
</select>
</label>
<label>Number<input name="number" value="%%(number)s"></label>
<div>%%(error)s</div>
<br>
<br>
<input type="Submit">'''

color_template = "<option %(selected)s>%(color)s</option>"
colors = [['red', False], ['blue', False], ['green', True]]
color_html = ''
for color, selected in colors:
    color_html += color_template % {'color':color,
                                    'selected': 'selected' if selected else ''}
html = html % {'colors': color_html}

Jinja では、次のようなことができます。

<select name='color'>
{% for color, selected in colors %}
<option {% if selected %}selected{% endif %}>{{ color }}</option>
{% endfor %}
</select>

同様のデータを提供します。

于 2013-10-23T19:54:16.190 に答える