簡體   English   中英

使用 WTForms (Flask) 中的單個類創建多個輸入元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM