【问题标题】:Redirect to other view after submitting form提交表单后重定向到其他视图
【发布时间】:2015-10-11 02:17:27
【问题描述】:

我有一份调查表。提交表单后,我想处理保存数据然后重定向到“成功”视图。我现在正在使用以下代码,但它只保留在当前 url 上,而我想转到 /success。我该怎么做?

@app.route('/surveytest', methods=['GET', 'POST'])
def surveytest():
    if request.method == 'GET':
        return render_template('test.html', title='Survey Test', year=datetime.now().year, message='This is the survey page.')
    elif request.method == 'POST':
        name = request.form['name']
        address = request.form['address']
        phone = request.form['phone']
        email = request.form['email']
        company = request.form['company']
        return render_template('success.html', name=name, address=address, phone = phone, email = email, company = company)

【问题讨论】:

    标签: python redirect flask


    【解决方案1】:

    您有正确的目标:在处理表单数据后进行重定向是件好事。与其再次返回render_template,不如使用redirect。

    from flask import redirect, url_for, survey_id
    
    @app.route('/success/<int:result_id>')
    def success(result_id):
         # replace this with a query from whatever database you're using
         result = get_result_from_database(result_id)
         # access the result in the tempalte, for example {{ result.name }}
         return render_template('success.html', result=result)
    
    @app.route('/survey', methods=["GET", "POST"])
    def survey():
        if request.method == 'POST':
            # replace this with an insert into whatever database you're using
            result = store_result_in_database(request.args)
            return redirect(url_for('success', result_id=result.id))
    
        # don't need to test request.method == 'GET'
        return render_template('survey.html')
    

    重定向将由用户的浏览器处理,新 url 处的新页面将被加载,而不是在同一个 url 处呈现不同的模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2014-10-09
      • 2013-04-13
      • 1970-01-01
      相关资源
      最近更新 更多