我对python很在行,所以这可能是个愚蠢的问题,抱歉
contact.html
{% extends 'layout.html' %}
{% block content %}
<form method="POST" action="/">
<fieldset class="form-field">
{{ form.iro.label }}<br>
{{ form.iro }}
{% if form.iro.errors %}
<ul class="errors">
{% for error in form.iro.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</fieldset><br>
{{ form.sub_issue }}
</form>
</div>
{% endblock %}
forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, TextField, SubmitField, FieldList, FormField, SelectField, Form
from wtforms.validators import DataRequired, Length, Optional
class ContactForm(FlaskForm):
"""Contact form."""
iro = SelectField(
'IRO',
choices=[]
)
sub_issue = SubmitField('Open an issue')
在我的代码中,我使用来自请求的json填充SelectField的choices参数
@app.route('/', methods=('GET', 'POST'))
def contact():
form = ContactForm()
if request.method == 'GET':
r = requests.get("https://...",verify=False)
form.iro.choices= [(iro,iro) for iro in list(r.json().values())]
return render_template('contact.html', form=form)
else:
if form.validate_on_submit():
#code when submitted...
但当我点击提交按钮时,在我的选择字段下会出现一个“无效选择”错误
你知道为什么吗
我无法测试它,但对我来说,所有的问题都是您只在
GET
中向choices
添加值。当您为POST
运行validate_on_submit():
时choices
为空,它将始终给出“无效选择”你需要这样的东西
如果
requests
总是获得相同的值,那么您应该在开始时只读取它们一次(在contact()
之外),在本地文件或数据库中写入,然后在contact()
中读取它们如果
requests
可能给出不同的值,那么您应该在GET
中读取它们,用uniqe名称保存在文件中(或用uniqe ID保存在数据库中),并将此名称/ID作为隐藏字段发送到HTML
。稍后在POST
中,您应该使用这个唯一的名称/ID从文件/数据库中读取或多或少
相关问题 更多 >
编程相关推荐