Flask WTF——表单总是重定向到根目录
Flask WTF – Forms always redirect to root
我创建了一个简单的 Flask WTF 表单
class SequenceForm(Form):
sequence = StringField('Please enter a sequence in FASTA format', validators=[Required()])
submit = SubmitField('Submit')
并且我已经设置了一个路径以使其出现在页面上
@main.route('/bioinformatics')
def bioinformatics():
form = SequenceForm()
return render_template('bioinformatics.html', form=form)
一切都很好(到目前为止)。当我将浏览器指向 foo/bioinformatics 时,我看到一个呈现了 SequenceForm 的页面。但是,当我点击提交按钮时,我总是被带回到由@main.route('/').
定义的根页面
如何让“提交”按钮将我带到其他地方?我想使用 validate_on_submit() 并对表单中输入的数据进行处理。
谢谢!
/迈克尔·克努森
更新(来自 bioinformatics.html 的代码)
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Bioinformatics{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Hello, Bioinformatics!</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}
您需要在 html 的表单中指定一个操作。
<form action="/url_which_handles_form_data" method="Post">
your code
</form>
如果您使用的是蓝图,请确保提供正确的路径
编辑:
从https://github.com/mbr/flask-bootstrap/blob/master/flask_bootstrap/templates/bootstrap/wtf.html找到这部分
{% macro quick_form(form,
action="",
method="post",
extra_classes=None,
role="form",
form_type="basic",
horizontal_columns=('lg', 2, 10),
enctype=None,
button_map={},
id="") %}
所以你可以调用
{{ wtf.quick_form(form, action="/fancy_url") }}
或
{{ wtf.quick_form(form, action=url_for("blueprint_name.fancy_url")) }}
取决于视图所在的位置。
感谢 Tim Rijavec 和 Zyber。我结合了您的建议提出了以下解决方案。
我在路由的方法中添加了 GET 和 POST
@main.route('/bioinformatics', methods=['GET', 'POST'])
def bioinformatics():
form = SequenceForm()
return render_template('bioinformatics.html', form=form)
然后我将 wtf.quick_form 调用包装在标签内。
<form action="{{ url_for('main.bioinformatics') }}" method="POST">
{{ wtf.quick_form(form) }}
</form>
现在一切正常。谢谢!
我创建了一个简单的 Flask WTF 表单
class SequenceForm(Form):
sequence = StringField('Please enter a sequence in FASTA format', validators=[Required()])
submit = SubmitField('Submit')
并且我已经设置了一个路径以使其出现在页面上
@main.route('/bioinformatics')
def bioinformatics():
form = SequenceForm()
return render_template('bioinformatics.html', form=form)
一切都很好(到目前为止)。当我将浏览器指向 foo/bioinformatics 时,我看到一个呈现了 SequenceForm 的页面。但是,当我点击提交按钮时,我总是被带回到由@main.route('/').
定义的根页面如何让“提交”按钮将我带到其他地方?我想使用 validate_on_submit() 并对表单中输入的数据进行处理。
谢谢!
/迈克尔·克努森
更新(来自 bioinformatics.html 的代码)
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Bioinformatics{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Hello, Bioinformatics!</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}
您需要在 html 的表单中指定一个操作。
<form action="/url_which_handles_form_data" method="Post">
your code
</form>
如果您使用的是蓝图,请确保提供正确的路径
编辑:
从https://github.com/mbr/flask-bootstrap/blob/master/flask_bootstrap/templates/bootstrap/wtf.html找到这部分
{% macro quick_form(form,
action="",
method="post",
extra_classes=None,
role="form",
form_type="basic",
horizontal_columns=('lg', 2, 10),
enctype=None,
button_map={},
id="") %}
所以你可以调用
{{ wtf.quick_form(form, action="/fancy_url") }}
或
{{ wtf.quick_form(form, action=url_for("blueprint_name.fancy_url")) }}
取决于视图所在的位置。
感谢 Tim Rijavec 和 Zyber。我结合了您的建议提出了以下解决方案。
我在路由的方法中添加了 GET 和 POST
@main.route('/bioinformatics', methods=['GET', 'POST'])
def bioinformatics():
form = SequenceForm()
return render_template('bioinformatics.html', form=form)
然后我将 wtf.quick_form 调用包装在标签内。
<form action="{{ url_for('main.bioinformatics') }}" method="POST">
{{ wtf.quick_form(form) }}
</form>
现在一切正常。谢谢!