【问题标题】:Flask WTF – Forms always redirect to rootFlask WTForms 总是重定向到根目录
【发布时间】:2015-06-26 08:25:44
【问题描述】:

我创建了一个简单的 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 %}

【问题讨论】:

  • 你能把bioinformatics.html的代码也贴出来吗?
  • 当然。我在问题的底部添加了它。
  • 您是否尝试在路由中添加methods=['GET', 'POST'] .. @main.route('/bioinformatics', methods=['GET', 'POST'])

标签: python flask wtforms flask-wtforms


【解决方案1】:

您需要在 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")) }}

取决于视图所在的位置。

【讨论】:

  • 谢谢。我会调查的。我一直在关注表单在主页上的教程。因此,从来没有必要做那样的事情。
  • @MichaelKnudsen 检查我的编辑,看看是否有效。
【解决方案2】:

感谢 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> 

现在一切正常。谢谢!

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2014-10-22
    • 2017-06-10
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多