Flask应用托管多个Dash应用,多个页面插件导致名称冲突
我正在尝试创建一个更大规模的仪表盘托管应用。这将包含许多仪表盘应用,每个应用都有多个页面。当我试图把同名的页面放在不同的仪表盘应用里时,出现了一个错误:
异常:模块 ['dashboards.dash1.pages.home', 'dashboards.dash2.pages.home'] 有重复的路径
我需要能够运行这些仪表盘应用,而不出现命名冲突。我检查了页面注册表,发现仪表盘应用在混淆相对路径。我明白不命名页面是一个解决方案,但我们会有很多仪表盘,这样做不太合适。
module dashboards.dash1.pages.home
supplied_path /home
path_template None
path /home
supplied_name home
name home
supplied_title None
title home
description
order None
supplied_order None
supplied_layout None
supplied_image None
image None
image_url None
redirect_from None
relative_path /dash1/home <---- SAME VALUES
layout H1('Dash 1 Home')
module dashboards.dash2.pages.home
supplied_path /home
path_template None
path /home
supplied_name home
name home
supplied_title None
title home
description
order None
supplied_order None
supplied_layout None
supplied_image None
image None
image_url None
redirect_from None
relative_path /dash1/home <---- SAME VALUES
layout H1('Dash 2 Home')
我的代码结构是这样的:
.
├── app.py
└── dashboards
├── dash1
│ ├── __init__.py
│ └── pages
│ └── home.py
└── dash2
├── __init__.py
└── pages
└── home.py
app.py
from dashboards.dash1 import app as dash1
from dashboards.dash2 import app as dash2
app = Flask(__name__)
routes = {
"/dash1": dash1.server,
"/dash2": dash2.server
}
app.wsgi_app = DispatcherMiddleware(NotFound(), routes)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
dash1/_init_.py
app = Dash("dash1", use_pages=True, pages_folder="dashboards/dash1/pages")
app.layout = html.Div([
html.H1(children='Dash 1', style={'textAlign':'center'}),
page_container
])
dash1/pages/home.py
register_page(__name__, name="home", path="/home")
layout = html.H1("Dash 1 Home")
dash2/_init_.py
app = Dash("dash2", use_pages=True, pages_folder="dashboards/dash2/pages")
app.layout = html.Div([
html.H1(children='Dash 2', style={'textAlign':'center'}),
page_container
])
dash2/pages/home.py
register_page(__name__, name="home", path="/home")
layout = html.H1("Dash 2 Home")
感谢你花时间阅读这篇长文!