在我的Flask應用程序中,我有一個用wtforms
和jinja
模板生成的表單。如果驗證通過,我想在新選項卡中重定向,否則我想保留在同一頁面上並顯示錯誤。但是,如果我在表單中設置了target="_blank"
,它將打開一個新選項卡,但不傳遞驗證並顯示那裏的錯誤。刪除target="_blank"
將不會打開新的選項卡。有沒有一種方法可以在不重寫js中的整個驗證的情況下實現呢?謝謝!Flask app只有在wtforms驗證後提交target =「_ blank」表單
代碼:
from wtforms import Form, TextAreaField, StringField, validators
class SubmitForm(Form):
field1 = StringField(u'field1', [validators.DataRequired()])
field2 = TextAreaField(u'field2', [validators.DataRequired()])
@app.route('/', methods=['POST'])
def sub():
form = SubmitForm(request.form)
if request.method == 'POST' and form.validate():
# great success
return redirect('/my_redirect_uri')
return render_template('index.html', form=form)
@app.route('/')
def layout():
return render_template('index.html', form=SubmitForm())
的index.html:
{% from "_formhelpers.html" import render_field %}
<form method=post action="/" target="_blank">
<dl>
{{ render_field(form.field1) }}
{{ render_field(form.field2) }}
</dl>
<p><input type=submit value=Submit>
</form>
_formhelpers.html(不是相關但completness的緣故):
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
我想你是對的。您需要編寫一個驗證您的Ajax請求的簡單控制器,然後您可以打開新的選項卡, –