Как сохранить пользовательский ввод из выпадающего меню с помощью Python

0

Я учу писать веб-приложение с помощью Python
Я представляю пользователю простую форму с запросом цвета (в выпадающем меню) и числа (в виде поля ввода текста).
Если номер недействителен, я хочу, чтобы пользователь снова просмотрел форму, чтобы она могла редактировать номер, но я хочу, чтобы выбранный цвет остался выбранным.
Это код формы:

<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, но как правильно вставить его?

  • 0
    Вы используете фреймворк? Язык шаблонов (например, Jinja2)?
  • 0
    Я использую фреймворк webapp2
Теги:

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>

И предоставить ему аналогичные данные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню