如何使用Python从下拉菜单中保留用户输入

时间:2013-10-23 15:39:56

标签: python html

我正在学习使用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字段(当然)总是重置为红色。是否有一种智能方法可以保留用户在下拉列表中选择的数据?
我在考虑selected HTML关键字,但如何将其置于正确的选项中?

1 个答案:

答案 0 :(得分: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>

并提供类似的数据。