【发布时间】:2020-01-01 03:36:18
【问题描述】:
我正在尝试在 Flask 中构建一个非常基本的应用程序:一个接受来自用户的一些输入的单一表单(我是 Web 开发的新手)。最初我能够启动并运行它,但是当我尝试修改 HTML 以包含 Bootstrap 时,单击提交按钮时出现Not a valid choice 错误。
主应用:
from flask import Flask, render_template, flash, session, redirect, url_for, request
from forms import CustomAnalyticsMenu
app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'
@app.route('/')
@app.route('/home')
def home():
return render_template('home.html')
@app.route('/custom_analytics_menu', methods=['GET', 'POST'])
def custom_analytics_menu():
form = CustomAnalyticsMenu()
if form.validate_on_submit():
print("validated_on_submit")
session['menu_item'] = form.menu_item.data
return redirect(url_for('submission'))
else:
print(form.errors)
return render_template('custom_analytics_menu.html', form=form)
@app.route('/submission', methods=['GET', 'POST'])
def submission():
return render_template('submission.html')
if __name__ == '__main__':
app.run(debug=True)
表格:
from flask_wtf import FlaskForm
from wtforms import StringField, RadioField, SelectField, SubmitField
from wtforms.validators import DataRequired
class CustomAnalyticsMenu(FlaskForm):
menu_item = SelectField('Menu Item:', choices=[('option_one', 'Option One'),
('option_two', 'Option Two'),
('option_three', 'Option Three')])
generate_deck = SubmitField('Generate deck')
HTML:
这是有效的 HTML 代码:
{% extends "layout.html" %}
{% block content %}
<div>
<form method="POST" action="">
{{ form.hidden_tag() }}
{{ form.menu_item.label }} {{ form.menu_item }}
{{ form.generate_deck() }}
</form>
</div>
{% endblock %}
但是,当我更改这部分时:
{{ form.menu_item.label }} {{ form.menu_item }}
对此:(我从这里得到:https://getbootstrap.com/docs/4.0/components/forms/#form-controls)
<div class="form-group">
<label for="menu_item">{{ form.menu_item.label }}</label>
<select class="form-control" id="menu_item">
{% for item in form.menu_item.choices %}
<option>{{ item[-1] }}</option>
{% endfor %}
</select>
</div>
我的SelectField 在功能上看起来是一样的(显然它具有 Bootstrap 样式除外),但是现在当我单击提交按钮时,没有任何反应,并且我收到错误 Not a valid choice。这是我正在尝试做的一个 sn-p,我也有一个 RadioField 和一个 StringField 但在尝试应用类似样式时我也会遇到同样的错误。有人可以帮助我了解我哪里出错了吗?
【问题讨论】:
标签: python bootstrap-4 flask-wtforms wtforms