【发布时间】:2016-11-26 11:40:30
【问题描述】:
在我的 Flask 应用程序中,我有一个使用 wtforms 和 jinja 模板生成的表单。如果验证通过,我想在新选项卡中重定向,否则我想留在同一页面上并显示错误。但是,如果我在我的表单中设置target="_blank",它会打开一个新选项卡而没有通过验证,并在那里显示错误。删除 target="_blank" 不会打开新标签页。有没有办法在不重写 js 中的整个验证的情况下实现这一点?谢谢!
代码:
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(不那么相关,但为了完整起见):
{% 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 请求,然后您可以打开新选项卡,