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

如何在Flask项目中实现网页指定时长后自动跳转至另一页面?

问题根因
  • 代码执行逻辑失效:Python函数一旦跑到return语句,后面的代码会直接终止执行。当前loading函数第一行就把loading内容作为响应返回了,后面的time.sleep(3)和redirect()全是永远碰不到的无效代码,跳转根本触发不了。
  • 实现逻辑和需求完全错位:就算把代码顺序改成「先sleep(3),再返回redirect响应」,效果也不对——服务器收到请求后会卡满3秒才把响应发给浏览器,这3秒里用户看到的是白屏等待,根本看不到要展示的loading页面文字。而且HTTP协议是一次请求对应一次响应,服务器把响应发完之后这次交互就结束了,根本没法在返回loading内容之后,隔几秒再给浏览器下发新的跳转指令。
  • 额外隐患:服务器端用长sleep做等待会长期占着请求连接资源,并发一高很容易把服务搞阻塞。
正确实现方案

延迟跳转是浏览器拿到页面之后的前端行为,应该把等待计时和跳转的逻辑放到前端实现,路由只需要直接返回带跳转配置的loading页面就行,不需要在服务器端卡等待。

方案1:meta标签自动跳转(无JS依赖,最简洁)

直接在返回的页面内容里嵌入配置好延迟时长和目标地址的meta标签:

@app.route("/")
def loading():
    return '''
    <h1> hello it is loading page</h1>
    <meta http-equiv="refresh" content="3;url=http://127.0.0.1:5000/home">
    '''

@app.route('/home')
def home():
    return '<h1> hello it is home page</h1>'

这个实现的逻辑是:服务器收到请求后立刻返回loading内容,浏览器收到响应马上渲染页面上的loading文字,之后按照meta标签的配置,等3秒自动加载目标home页面,完全匹配需求。

方案2:JS定时跳转(灵活性更高)

如果需要在跳转前加额外的交互逻辑(比如给进度条加动画),可以把meta标签替换成定时触发跳转的JS代码:

@app.route("/")
def loading():
    return '''
    <h1> hello it is loading page</h1>
    <script>
    // 3000毫秒即3秒后触发页面跳转
    setTimeout(() => {
        window.location.href = "http://127.0.0.1:5000/home"
    }, 3000)
    </script>
    '''

注意:全程不需要引入time模块做sleep等待,这种服务器端阻塞的实现方式既满足不了需求,也会平白浪费服务器资源。

内容的提问来源于stack exchange,提问作者SDB PROGRAM LEARNER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 17:24:06