如何在Flask中制作RadioField?
我有一个表单,里面有一个文本框(TextField)、一个文件框(FileField),现在我想加一个单选框(RadioField)。
我想要一个单选框,里面有两个选项,用户只能选择其中一个。我是按照之前两个能正常工作的表单的例子来做的。
我的 forms.py 文件看起来是这样的:
from flask import Flask, request
from werkzeug import secure_filename
from flask.ext.wtf import Form, TextField, BooleanField, FileField, file_required, RadioField
from flask.ext.wtf import Required
class ImageForm(Form):
name = TextField('name', validators = [Required()])
fileName = FileField('fileName', validators=[file_required()])
certification = RadioField('certification', choices = ['option1', 'option2'])
在我的 views.py 文件里,我写了:
form = myForm()
if form.validate_on_submit():
name = form.name.data
fileName = secure_filename(form.fileName.file.filename)
certification = form.certification.data
在我的 .html 文件里,我写了:
{% block content %}
<h1>Simple Form</h1>
<form action="" method="post" name="simple" enctype="multipart/form-data">
{{form.hidden_tag()}}
<p>
Name:
{{form.name(size=80)}}
</p>
<p>
Upload a file
{{form.fileName()}}
</p>
<p>
Certification:
{{form.certification()}}
</p>
<p><input type="submit" value="Submit"></p>
</form>
{% endblock %}
我在网上找不到使用单选按钮表单的例子。我找到了一些关于 RadioField 的描述,可以在这里查看 http://wtforms.simplecodes.com/docs/0.6/fields.html
当我尝试访问我的表单页面时,出现了调试错误 "ValueError: too many values to unpack"
2 个回答
10
form.certification() 这个方法是不能直接使用的。你需要逐个处理模板里的值:
把下面的内容替换掉:
{{ form.certification() }}
换成:
{% for subfield in form.certification %}
<tr>
<td>{{ subfield }}</td>
<td>{{ subfield.label }}</td>
</tr>
{% endfor %}
45
在forms.py文件中,RadioField应该这样写:
RadioField('Label', choices=[('value','description'),('value_two','whatever')])
这里的选项是'description'和'whatever',提交的值分别是'value'和'value_two'。