Я работаю над своим первым приложением Da sh (у меня есть опыт в Django и очень мало в Flask, на котором я знаю, что Da sh построен), но у меня проблемы с маршрутизацией и регистрация обратных вызовов для новых страниц. Я прочитал несколько статей на эту тему, таких как: 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 сгенерирует макет и обратные вызовы для загрузки. 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, когда он не работал. (Функциональность была взята непосредственно из примера Da sh, указанного выше.)
Когда я go захожу на мою вторую страницу, контент загружается нормально, но обратный вызов - нет, поэтому выбор элемента из выпадающего списка down не заполняет div так, как это должно быть. Предполагается, что он также запускается при загрузке, чтобы показать начальное значение, но он также не делает этого.
Любая помощь будет принята с благодарностью! Спасибо!