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>
我有多个表单,每个表单都有一个提交按钮,所有这些都在一个模板中。 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>