You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask处理POST请求后如何重定向跳转至其他HTML页面

问题根因

你当前代码无法跳转的核心问题有两个:

  • 视图函数中调用了render_template但没有用return返回响应,Flask只有接收到视图函数return的内容才会把资源返回给前端,仅调用方法不会产生任何响应。
  • 没有区分前端提交请求的方式:普通表单提交和AJAX异步提交的跳转逻辑完全不同,直接套同一种写法不会生效。

另外render_template不需要传static_folder参数,静态路径在Flask实例初始化时全局配置即可,传入该参数无效。

分场景解决方案

场景1:前端通过原生form表单提交(非异步)

这是最简单的场景,直接返回渲染后的目标页面即可,注意如果是普通表单提交,不要用request.get_json()取参数,要改用request.form获取表单字段:

@app.route('/test', methods=['POST'])                                
def test():
    # 普通表单提交用request.form拿参数,get_json仅适用于Content-Type为application/json的请求
    form_data = request.form
    print(form_data)
    # 必须加return,将渲染完成的HTML返回给前端
    return render_template('secondform.html')

如果你希望跳转后浏览器地址栏变更为目标页面的路径,可以用重定向方案,先写好目标页面的GET路由,再在POST处理逻辑中跳转:

from flask import redirect, url_for

# 第二个页面的GET路由
@app.route('/second-form')
def second_form():
    return render_template('secondform.html')

@app.route('/test', methods=['POST'])                                
def test():
    form_data = request.form
    print(form_data)
    # 重定向到目标页面
    return redirect(url_for('second_form'))

场景2:前端通过AJAX/fetch/axios异步发POST请求

异步请求不会触发浏览器的默认页面跳转,就算后端直接返回HTML内容,也只会作为请求响应体被JS接收,不会替换当前页面。这种场景需要后端返回跳转标识,前端收到标识后主动触发页面跳转。
后端代码示例:

from flask import jsonify

@app.route('/test', methods=['POST'])                                
def test():
    req_data = request.get_json()
    print(req_data)
    # 返回JSON格式的跳转地址
    return jsonify({
        "status": "success",
        "redirect": "/second-form"
    })

前端请求回调中加跳转逻辑,以fetch为例:

// 按钮点击触发的请求逻辑
fetch('/test', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(提交的参数对象)
})
.then(res => res.json())
.then(res => {
    // 收到跳转标识后主动切换页面
    if (res.redirect) {
        window.location.href = res.redirect
    }
})
注意事项
  • 所有要通过render_template渲染的HTML文件,必须放在项目根目录的templates文件夹下,否则会触发模板找不到的404错误。
  • 静态资源(JS/CSS/图片等)统一放在项目根目录的static文件夹下,HTML中引用路径写/static/资源路径即可,不需要额外传参配置。
  • 用原生表单提交的话,确认form标签的method属性为post,action属性填写为/test。

内容的提问来源于stack exchange,提问作者U13-Forward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 02:54:40