Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

passing value from 1 page to another in dash plotly

I am trying to pass input value to another with Dash Plot.

The main page has a list of strategies :

First_page = html.Div([
    html.Div([dcc.Dropdown(id='strategy', options=[{'label': i, 'value': i} for i in [strat1, start2]], multi=True)], value = [strat1]),
    html.Div([dcc.Input(id='date_start', type='text', value='1990-01-01')]),
    html.Button('Start Calculation', id='button'),
])

And my pages 1 and 2 are the following :

for i in range(2) : 
    layout = html.Div([
        html.Div([dcc.Dropdown(id='strategy'+str(i), options=[{'label': i, 'value': i} for i in [strat1, start2]]])], value = strat+str(i)),
        html.Div([dcc.Input(id='date_start'+str(i), type='text', value='1990-01-01')]),
        html.Button('Start Calculation', id='button'+str(i)),
        + other options not listed in main page
    ])

The goal is the following : when the user is on the main page he can choose the list of strategies he want to see, as well as the starting date.

Then when he press the button, it should open pages for each strategy selected (In the example we have 2 strategies so I should have 2 pages : localhost:port/page-strat1 and localhost:port/page-strat2) where the graph shown on each page starts with the selected date.

I succeed to open the pages localhost:port/strat1 and/or the page localhost:port/strat2 depending on the list of selected strategies.

list_event = [Event('button', 'click')]
list_state = [State('strategy', 'value')]
@app.callback(Output('hidden-div', 'children'),events=list_event, state=list_state)
def create_callback_share(datestart, list_strategies_used):
    for _strat in list_strategies_used:
        time.sleep(1)
        webbrowser.open('http://localhost:port/page-'+_strat)

But I do not succeed to send the selected date. I try the following callback :

for i in range(2) : 
    @app.callback(Output('date_start'+str(i), 'value'),inputs=[Input('date_start', 'value')])
    def set_display_children(selected_element):
        return "{}".format(selected_element)

But the page localhost:port/strat1 and localhost:port/strat2 allow open with the default value which is '1990-01-01' even if I enter another value in the main page.

Is it possible to send value from one page to the other ?

like image 224
eleanor Avatar asked Nov 08 '22 05:11

eleanor


1 Answers

Use dcc.Store() as in the answer here: Plotly Dash Share Callback Input in another page with dcc.Store

And here is the Dash documentation: https://dash.plotly.com/dash-core-components/store

like image 156
Claire Avatar answered Nov 14 '22 21:11

Claire