在提交之前创建表单列表

时间:2018-04-13 09:37:36

标签: python-3.x flask flask-wtforms

我对烧瓶和网络开发都很陌生,所以我不确定这是不是很糟糕。

我在一个显示视频的html模板上显示了一个烧瓶表单。

class MyForm:
    string1 = StringField('string',  validators=[DataRequired()])
    selectField = SelectField(
        'Select',
        choices=['Choice 1','Choice 2','Choice 3'],
        validators=[DataRequired()]
    )
    submit = SubmitField('Submit')

有没有办法可以创建已完成表单的缓冲区,以便他们可以在每次提交表单时观看整个视频而不会被重定向? (表格与视频有关,可以在结束前多次填写。)

我希望在视频结尾处有效地提供一系列表单。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用FieldList。这是一个工作片段:

from flask import Flask, render_template_string
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, FieldList, FormField, SelectField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'asrtarst'


class SingleTestForm(FlaskForm):
    string1 = StringField('string', validators=[DataRequired()])
    selectField = SelectField(
        'Are you Happy?',
        choices=[('1', 'Yes'), ('2', 'No')],
        validators=[DataRequired()]
    )


class MultiTestForm(FlaskForm):
    name = StringField('name')
    memories = FieldList(FormField(SingleTestForm), min_entries=5)
    submit = SubmitField('Submit')


@app.route('/test', methods=['GET', 'POST'])
def test():
    form = MultiTestForm()
    if form.validate_on_submit():
        return 'nice form'
    return render_template_string(
    '''
    <html>
        <h1>{{ url_for('test') }}</h1>
    <form method="POST" action="{{ url_for('test')}}">
    {{ form.hidden_tag() }}
        <div>{{ form.name.label }}: {{ form.name() }}</div>
        <div>{{ form.memories.label }}: {{ form.memories() }}</div>
        <div>{{ form.submit.label }}: {{ form.submit() }}</div>
    </form>
    </html>
    ''', form=form)

然后,您可以在客户端使用javascript仅显示当前子表单。