使用数据填充 WTForms FormField FieldList 导致字段中的 HTML [英] Filling WTForms FormField FieldList with data results in HTML in fields
本文介绍了使用数据填充 WTForms FormField FieldList 导致字段中的 HTML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个 Flask 应用程序,我可以通过上传一个 CSV 文件来填充表单数据,然后读取该文件.我想用从 CSV 读取的数据填充 FieldList.但是,当我尝试填充数据时,它会将原始 HTML 输入到 TextFields 中,而不仅仅是我想要的值.我做错了什么?
app.py
from flask import Flask, render_template, request, url_for从flask.ext.wtf 导入表单从 wtforms 导入 StringField、FieldList、FormField、SelectField从 wtforms.validators 导入 DataRequired从 werkzeug.datastructures 导入 MultiDictapp = Flask(__name__)app.config['SECRET_KEY']='asdfjlkghdsf'# 通常从上传的文件中读取学生数据,但在本演示中我们使用虚拟数据student_info=[("123","Bob Jones"),("234","Peter Johnson"),("345","Carly Everett"),(456"、约瑟芬·埃奇伍德")、(567"、帕特·怀特")、(678"、杰西·布莱克")]类 FileUploadForm(Form):经过类 StudentForm(Form):student_id = StringField('Student ID', validators = [DataRequired()])student_name = StringField('Student Name', validators = [DataRequired()])类 AddClassForm(Form):name = StringField('classname', validators=[DataRequired()])day = SelectField('上课日',选择=[(1,星期一"),(2,星期二"),(3,星期三"),(4,星期四"),(5,星期五")],强制=整数)student = FieldList(FormField(StudentForm), min_entries = 5) # 默认显示至少 5 个空白字段@app.route('/', methods=['GET', 'POST'])定义添加类():文件格式 = FileUploadForm()classform = AddClassForm()# 检查哪个提交"按钮被调用以验证正确的表单如果 request.form 和 classform.validate_on_submit() 中的addclass":# 将类添加到数据库 - 与此示例无关.返回重定向(url_for('addclass'))如果 request.form 和 fileform.validate_on_submit() 中的上传":# 从帖子中获取数据文件 - 与此示例无关.# 通过使用从文件中读取的值填充类来覆盖类classform = PopulateFormFromFile()return render_template('addclass.html', classform=classform)return render_template('addclass.html', fileform=fileform, classform=classform)def PopulateFormFromFile():classform = AddClassForm()# 通常我们会读取作为参数传入的文件并提取数据,# 但让我们只使用这个文件顶部的虚拟数据,以及一些硬编码的值classform.name.data = "超级棒的课堂"classform.day.data = 4 # 星期四# 弹出学生信息中已有的任何空白字段而 len(classform.students) >0:classform.students.pop_entry()对于 student_id,student_info 中的名称:# 这两种方式中的任何一种都有相同的最终结果.## studentform = StudentForm()# studentform.student_id.data = student_id# studentform.student_name.data = name## 或者student_data = MultiDict([('student_id',student_id), ('student_name',name)])studentform = StudentForm(student_data)classform.students.append_entry(studentform)返回课堂表如果 __name__ == '__main__':app.run(调试=真,端口=5001)
模板/addclass.html
<头><title>Flask FieldList Demo</title>头部><身体><h1>添加类</h1>{% 如果文件形式 %}<div><p>从文件中添加类:</p><form action="" method="post" enctype="multipart/form-data" name="fileform">{{ fileform.hidden_tag() }}<p><input type="submit" name="upload" value="Upload"></p></表单>
<小时>{% 万一 %}<div><form action="" method="post" name="classform">{{ classform.hidden_tag() }}类名:{{ classform.name }}
日:{{ classform.day }}<br><br><div><表格><tr><th>学生编号 </th><th>名称</th></tr>{% for student in classform.students %}<tr><td>{{ student.student_id }}</td><td>{{ student.student_name }}</td></tr>{% 结束为 %}
<p><input type="submit" name="addclass" value="Add Class"></p></表单>