Sco*_*ott 5 python flask plotly-dash
我正在开发我的第一个 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)
Run Code Online (Sandbox Code Playgroud)
然后我想构建将加载到“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)
Run Code Online (Sandbox Code Playgroud)
最终我想制作另外 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
Run Code Online (Sandbox Code Playgroud)
并创建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)
Run Code Online (Sandbox Code Playgroud)
然后 build.py 的代码就可以工作了!正如我所说,我不确定为什么会出现这种情况......
| 归档时间: |
|
| 查看次数: |
3347 次 |
| 最近记录: |