Flask render_template 清除所有其他形式

Flask render_template clears all other forms

我有多个表单,每个表单都有一个提交按钮,所有这些都在一个模板中。 render_template returns 只有空 StringFields。如何在不触及其他 StringFields 的情况下进行渲染?

@app.route('/', methods=['GET','POST'])
def index():
    msform = msForm(request.form)
    synform = synForm(request.form)    

    if request.method == 'POST' and msform.validate() and msform.ms_submit.data:
        processed_text = model.most_similar(positive=[msform.ms_3.data, msform.ms_2.data], negative=[msform.ms_1.data])
        msform.ms_submit.label.text = processed_text[0][0]        
        return render_template('my-form.html', msform=msform, synform=synform)        

    elif request.method == 'POST' and synform.validate() and synform.syn_submit:
        processed_text = model.most_similar([synform.syn_1.data])    
        return render_template('my-form.html', msform=msform, synform=synform)

    return render_template('my-form.html', msform=msform, synform=synform)

class msForm(Form):
    ms_1 = StringField(label='Eingabe_1', default = 'king', validators=[validators.DataRequired(message='This Field is required')])
    ms_2 = StringField(label='Eingabe_2', default = 'man', validators=[validators.DataRequired(message='This Field is required')])
    ms_3 = StringField(label='Eingabe_3', default = 'queen', validators=[validators.DataRequired(message='This Field is required')])
    ms_submit = InlineSubmitField(label = '?')

class synForm(Form):
    syn_1 = StringField(label='Eingabe', default = 'king', validators=[validators.DataRequired()])
    syn_submit = InlineSubmitField('?')

我假设您的 HTML 页面上有两个单独的 <form>,为简洁起见,如下所示:

<form>{{ msform }}</form>
<form>{{ synform }}</form>

我相信您是这样说的:完成并提交一份表格后,另一份表格的值就会丢失。对吗?

如果是这样,那就是预期的行为,不是来自 Flask,而是来自您的浏览器。当您提交 HTML <form> 时,只会将来自该表单标记的数据发送到服务器。因此,其他 <form> 标签中的所有数据都将丢失。

要提交所有表单,请在同一个 <form> 标记中呈现所有表单。给每个表单一个前缀,以确保输入名称不会冲突。

msform = msForm(request.form, prefix='ms')
<form method="post">
    {{ msform }}
    {{ synform }}
</form>