[英]Create multiple input elements using single class in WTForms (Flask)
我正在 Flask 中制作一個 Web 應用程序來生成要導入 Excel 的 XML。 該網絡應用程序有一個表格,其中有 15 個問題、4 個問題選項、正確答案和一個計時器。
這里是我的forms.py
這是使用WTForms:
from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, IntegerField, SubmitField
from wtforms.validators import DataRequired, Length
class XMLQuestionForm(FlaskForm):
question = StringField('Question', validators=[DataRequired(), Length(max=395)])
optionA = StringField('Option A', validators=[DataRequired(), Length(max=85)])
optionB = StringField('Option B', validators=[DataRequired(), Length(max=85)])
optionC = StringField('Option C', validators=[DataRequired(), Length(max=85)])
optionD = StringField('Option D', validators=[DataRequired(), Length(max=85)])
answer = SelectField('Answer', validators=[DataRequired()], choices=[('Option A','Option B','Option C','Option D')])
timer = IntegerField('Timer', default=60)
現在,我想創建一個 HTML 文件,其中可以輸入和提交 15 個不同的問題、選項和答案。 提交后我會在routes.py
處理
這是我的routes.py
:
from flask import render_template, url_for, flash, redirect
from myflaskapp import app
@app.route("/")
@app.route("/home",)
def home():
form = XMLQuestionForm()
if form.validate_on_submit():
#Do something
else:
flash('ERROR MESSAGE', 'danger')
return render_template('home.html', title='Questions XML Form', form=form)
我想擁有 15 個我上面提到的這樣的字段,而不必創建多個表單類變量。
我該怎么做?
我將保留對這種方法的效率或適當性的判斷,但這樣做可能是一種工廠功能:
def create_form(input):
class Form(FlaskForm):
timer = IntegerField('Timer', default=60)
kwargs = {'validators': [DataRequired(), Length(max=85)]}
for i, vals in enumerate(input):
setattr(Form, 'questn_' + str(i), StringField(vals[0], **kwargs))
setattr(Form, 'answer_' + str(i), StringField(vals[1], **kwargs))
for j, opt in enumerate(vals[2]):
setattr(Form, 'opt_' + str(i) + str(j), StringField(opt, **kwargs))
return Form
Form = create_form([
['Question1', 'Answer1', ['OptA', 'OptB', 'OptC']],
['Question2', 'Answer2', ['OptX', 'OptY']]
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.