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

在Flask中运行带回调与图表的多页面Plotly-Dash应用

嘿,看起来你已经把多页面Dash应用搭得挺顺手了,现在要把它嵌到Flask里运行对吧?其实你的现有代码已经踩中了关键——从appc里导入的server就是Flask实例!下面给你一步步捋清楚完整的集成流程:

多页面Dash应用集成到Flask的实操指南

1. 先确认appc.py的核心结构

首先得保证你的appc.py是把Dash挂载在Flask实例上的,示例代码如下:

from flask import Flask
import dash

# 初始化Flask服务实例
server = Flask(__name__)

# 将Dash应用绑定到这个Flask实例上
# 可选:routes_pathname_prefix='/dash/' 可以让Dash在Flask的子路径下运行,比如/dash/
app = dash.Dash(__name__, server=server, routes_pathname_prefix='/dash/')

2. 保留你的index.py逻辑(微调可选)

你现有的index.py代码已经正确导入了Flask服务和各个页面,只需要确保页面跳转的回调正常即可,示例如下:

from appc import app, server
import page1c, page2c, page3c
from dash import html, dcc, Input, Output

app.layout = html.Div([
    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content')
])

# 页面跳转的核心回调
@app.callback(Output('page-content', 'children'),
              Input('url', 'pathname'))
def display_page(pathname):
    if pathname == '/dash/page1':  # 如果设置了routes_pathname_prefix,路径要对应
        return page1c.layout
    elif pathname == '/dash/page2':
        return page2c.layout
    elif pathname == '/dash/page3':
        return page3c.layout
    else:
        return html.H1('欢迎来到Dash主页')  # 你的索引页内容

小贴士:如果之前没设置routes_pathname_prefix,那路径直接写/page1就行,不用加前缀。

3. 用Flask启动应用(关键)

之前你是直接跑python index.py启动Dash,现在要切换成用Flask的实例来启动,有两种常用方式:

方式一:在index.py末尾加启动代码

在index.py的最后添上这段,直接运行python index.py就能启动Flask托管的Dash:

if __name__ == '__main__':
    server.run(debug=True, port=8050)  # 这里用server.run()而不是app.run()!

方式二:用Flask CLI命令启动

适合更规范的项目结构,先设置环境变量:

# Linux/macOS
export FLASK_APP=index.py
export FLASK_DEBUG=1

# Windows(PowerShell)
$env:FLASK_APP = "index.py"
$env:FLASK_DEBUG = 1

然后启动:

flask run --port 8050

4. 验证效果

启动后访问对应的地址:

  • 如果设置了routes_pathname_prefix='/dash/',就访问http://localhost:8050/dash/
  • 没设置前缀的话直接访问http://localhost:8050
    你会发现索引页、页面跳转、图表和回调都和单独运行Dash时一样正常!

额外拓展:Flask和Dash路由共存

如果你的Flask还需要其他非Dash的页面,直接在server上定义路由就行,比如:

@server.route('/')
def flask_homepage():
    return '<h1>这是Flask独立的主页</h1>'

这样Flask的/路由和Dash的路由互不干扰,完美共存。

内容的提问来源于stack exchange,提问作者Moni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:16:01