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字段(当然)总是重置为红色。有没有一种聪明的方法来保存用户在下拉列表中选择的数据?
我正在考虑selectedHTML 关键字,但如何将其放入正确的选项中?

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 回答