gpt4 book ai didi

python - 未注册的多页 Dash 应用回调

转载 作者:行者123 更新时间:2023-12-03 23:49:30 26 4
gpt4 key购买 nike

我正在开发我的第一个 Dash 应用程序(我在 Django 方面有经验,在 Flask 方面的经验很少,我知道 Dash 是建立在 Flask 上的),但是我在路由和注册新页面的回调方面遇到了麻烦。
我已经阅读了一些关于该主题的文章,例如:https://dash.plot.ly/urls

目前我有我的主要 app.py:

from app1 import build as app1

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
server = app.server
app.config.suppress_callback_exceptions = True


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

app.layout = html.Div([navbar, body])


@app.callback(dash.dependencies.Output('page-content', 'children'),
[dash.dependencies.Input('url', 'pathname')])
def display_page(pathname):
if pathname == '/' or pathname == '' or pathname == '/index':
return build_index_page()
elif pathname == '/1':
return app1.layout
else:
return html.H3('URL Error!')


if __name__ == '__main__':
app.run_server(debug=True)

然后我想构建将加载到“html.Div(id='page-content')”中的子应用程序/图形

App1 是它自己的子目录,包含 init.py 和 build.py,其中 build 将生成要加载的布局和回调。构建.py:
from app import app

#layout = build_body()
# initialize_callbacks(app)

layout = html.Div([
html.H3('App 1'),
dcc.Dropdown(
id='app-1-dropdown',
options=[
{'label': 'App 1 - {}'.format(i), 'value': i} for i in [
'NYC', 'MTL', 'LA'
]
]
),
html.Div(id='app-1-display-value')
])


@app.callback(
Output('app-1-display-value', 'children'),
[Input('app-1-dropdown', 'value')])
def display_value(value):
return 'You have selected "{}"'.format(value)

最终我想制作另外 2 个文件,一个包含布局,一个包含回调。你可以看到我的原始实现被注释掉了,但是当它不起作用时我只是将代码移到 build.py 中。 (该功能直接取自上面链接的 Dash 示例。)

当我转到我的第二页时,内容加载正常但回调没有,因此从下拉列表中选择一个项目不会按预期填充 div。它也应该在加载时触发以显示初始值,但它也没有这样做。

任何帮助将不胜感激!谢谢!

最佳答案

我想通了,但我不确定“为什么”

如果我将 app.py 编辑为:

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
server = app.server
app.config.suppress_callback_exceptions = True

并创建 index.py 为:
from app1 import build as app1
from app import app


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

app.layout = html.Div([navbar, body])


@app.callback(dash.dependencies.Output('page-content', 'children'),
[dash.dependencies.Input('url', 'pathname')])
def display_page(pathname):
if pathname == '/' or pathname == '' or pathname == '/index':
return build_index_page()
elif pathname == '/1':
return app1.layout
else:
return html.H3('URL Error!')


if __name__ == '__main__':
app.run_server(debug=True)

然后 build.py 的代码起作用了!正如我所说,我不确定为什么会这样......

关于python - 未注册的多页 Dash 应用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59903698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com