@zhy_12356 wrote:
I’m trying to bulld a mutil-page app,my aid is list all my views in tabs, when I click a tab,show it’s view, my app structure is :
- index.py
- apps
|-- init.py
|-- views
----|-- init.py
----|-- view1.py
----|-- view2.py
.
.
.But I found a problem: I have to refresh my page then the view’s callback function can be called , for example , I have a test ,the code is :
from dash.dependencies import Input,Output,State import dash_html_components as html import dash_core_components as dcc from app import app layout=html.Div([ dcc.Dropdown( id='abc', options=[ {'label': 'a', 'value': 'NYC'}, {'label': 'b', 'value': 'MTL'}, {'label': 'c', 'value': 'SF'} ], ), html.Div(id='show') ]) @app.callback( Output('show','children'), [Input('abc','value')] ) def update(value): return 'you choose {}'.format(value)The first time I choose the tab , I just can see the dropdown without ‘show’'s content, after I refresh my page , I can see the content ‘you choose None’.
here is my index.py
import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input, Output from dash.exceptions import PreventUpdate from app import app import importlib from methods import getData apps_list = getData.get_apps_name() app.layout = html.Div([ dcc.Tabs(id='apps', value=apps_list[0], children=[ dcc.Tab(value=i, label=i) for i in apps_list ]), html.Div(id='content'), @app.callback( Output('content', 'children'), [Input('apps', 'value')] ) def update_content(value): module_list = getData.get_apps_modules(value) if len(module_list) > 0: tabs = [] for i in module_list: tabs.append( dcc.Tab( value=i, label=i ) ) return html.Div([ dcc.Tabs( id='modules', value=tabs[0].value, children=tabs ), html.Div(id='views-field') ]) @app.callback( Output('views-field','children'), [Input('modules','value')] ) def update_views_tab(value): views_list=getData.get_modules_views(value) if len(views_list) > 0: tabs=[ dcc.Tab( value=i, label=i ) for i in views_list ] return html.Div([ dcc.Tabs( id='views', value=tabs[0].value, children=tabs ), html.Div(id='show-views') ]) @app.callback( Output('show-views','children'), [Input('views','value')] ) def show_views(value): val= importlib.import_module('apps.views.'+value) layout=val.layout return layout if __name__ == "__main__": app.run_server(debug=True)Cause I decided to dynamically add views in package, I try to save views name in sql and dynamically import views by their name. All the views without callback functions can work correctly , but views contains callbacks will cause above-problem. I think my index.py have problems because run view directly generate no problems, but I don’t konw what problem is.
Wish I express it clearly and hope to get your help .
Posts: 1
Participants: 1