【问题标题】:How to Reload Flask-based Webpage after form submission [duplicate]提交表单后如何重新加载基于 Flask 的网页[重复]
【发布时间】:2018-03-31 00:42:35
【问题描述】:

这是我目前的代码(省略库和其他不必要的部分):

    app = Flask(__name__)

    class SearchForm(Form):
        inputString = TextAreaField('', [validators.DataRequired()])

    @app.route('/')
    def index():
        return render_template('Website.html')

    @app.route('/results', methods=['POST'])
    def results():
        ...
        form = SearchForm(request.form)
        if request.method == 'POST' and form.validate():
            inputString = request.form['inputString']
        ...
        return render_template('Website.html', cLinkName=cLinkName, \
                                               lLinkName=lLinkName)

    if __name__ == '__main__':
        app.run(debug=True, use_reloader=True)

这是网页(仅显示提交SearchForm时更改的表单和变量):

    <form method=post action="{{url_for('results')}}" style="text-align: center;">
        <input type="text" id="inputString" name="inputString"/>
        <input type=submit value='Search' name='search_btn'>
    </form>
    <table align="center" border="1">
        <tr>
            <td style='text-align: center;'>{{ cLinkName }}</td>
            <td style='text-align: center;'>{{ lLinkName }}</td>
        </tr>
    </table>

首先,我查看了Flask: redirect to same page after form submission,我相信我试图实现被接受为正确答案的内容,但它对我不起作用,因为我还试图将变量提交到更新的网页,而不是仅仅刷新网页。

我希望能够提交网页的SearchForm,然后使用通过多次提交我的SearchForm 产生的cLinkNamelLinkName 更新我的网页。不幸的是,我的代码只允许我提交SearchForm,然后使用cLinkNamelLinkName 更新我的网页,这些lLinkName 只提交一次我的SearchForm。而且,当我尝试重新加载网页时,我会收到“继续重新提交表单”弹出窗口。所以我的问题是如何让我的网页允许我提交SearchForm 并多次更新自己?

经过进一步研究, Clear valid form after it is submitted,我现在可以请求 GET 请求并确保我可以重新加载 localhost/results 页面并提交另一个表单,但它不会再次通过算法运行表单。

【问题讨论】:

  • 在页面上为您的表单操作呈现什么?
  • 首次将算法中的语句打印到控制台日志,并在 POST 请求完成后更新网页。任何其他时间它都会跳过算法并立即声明 POST 请求已完成,也不会更新网页。
  • 我不清楚。您是否尝试查看表中所有搜索到的cLinkNamelLinkName
  • 不,它们都应该根据我在SearchForm 中输入的内容进行更新

标签: python flask


【解决方案1】:

if request.method == 'POST' and form.validate(): 正文中添加return redirect(url_for('results')) 作为最后一行,一切正常。

【讨论】:

  • 我目前正在这样做,但它会将同一页面添加到浏览器历史记录中,因此当您单击返回时,您将返回到同一页面。关于如何解决这个问题的任何想法?
猜你喜欢
  • 2017-06-22
  • 2019-11-26
  • 2017-06-23
  • 1970-01-01
  • 2013-11-19
  • 2015-01-17
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多