Сохраняйте данные при изменении макета в Dash - PullRequest
0 голосов
/ 24 февраля 2020

Я сделал строку меню в Da sh, где кнопки относятся к разным страницам, которые имеют разные макеты. При переключении между различными раскладками пользовательский ввод теряется. Есть ли способ сохранить эту информацию, чтобы она оставалась там, когда вы вернетесь на страницу? Короткая версия кода выглядит так:

main_layout = html.Div([
dbc.Container([
    dbc.Row([
            html.Img(src='data:image/png;base64,{}'.format(base64.b64encode(open(images_directory + "topBanner.png", 'rb').read()).decode()))
            ], id='upperRow'),
    dbc.Row([
            dbc.Col(html.Div(className = "blackSolidBar"))
            ]),
    dbc.Row([
        dbc.Col(html.Div(id="sideBarTop"), width=2),
        dbc.Col(html.Img(src='data:image/png;base64,{}'.format(base64.b64encode(open(images_directory + "button1.png", 'rb').read()).decode()), id = 'button1'), align='center'),
        dbc.Col(html.Img(src='data:image/png;base64,{}'.format(base64.b64encode(open(images_directory + "button2.png", 'rb').read()).decode()), id = 'button2'), align='center'),
        dbc.Col(html.Img(src='data:image/png;base64,{}'.format(base64.b64encode(open(images_directory + "button3.png", 'rb').read()).decode()), id = 'button3'), align='center'),
        dbc.Col(html.Img(src='data:image/png;base64,{}'.format(base64.b64encode(open(images_directory + "button4.png", 'rb').read()).decode()), id = 'button4'), align='center')
    ], id='buttons'), 
    dbc.Row([ 
       dbc.Col(html.Div(className = "blackSolidBar"))
    ]),
    dbc.Row([
       dbc.Col(dbc.Col(html.Img(src='data:image/png;base64,{}'.format(base64.b64encode(open(images_directory + "sideBar.png", 'rb').read()).decode())), width=1, id='sideBarCol')),
       dbc.Col(html.Div(id='tabs-content-inline'), width=10)
    ])
  ]),   
], id='mainLayout')

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.SUPERHERO],
            meta_tags=[
    {"name": "viewport", "content": "width=device-width, initial-scale=1"}
])
app.layout = html.Div(main_layout)

tab1_layout = html.Div([
        dbc.Container([
            dbc.Row([
               dbc.Col(html.Div("Input Something", className="smallLabel")),
               dbc.Col(dcc.Input(placeholder="", 
                                 type ="text", 
                                 value=''))
            ])
        ])
    ])

tab2_layout = html.Div([
        dbc.Container([
            dbc.Row([
               dbc.Col(html.Div("Input Something", className="smallLabel")),
               dbc.Col(dcc.Input(placeholder="", 
                                 type ="text", 
                                 value=''))
            ])
        ])
    ])


@app.callback(Output('tabs-content-inline', 'children'),
          [Input('button1', 'n_clicks_timestamp'), 
           Input('button2','n_clicks_timestamp')] 
           )
def render_tab(click1, click2): 
  if click1 == None: 
    click1 = 0
  if click2 == None: 
    click2 = 0

  if click2 > click1 
    return tab2_layout
  else: 
    return tab1_layout

if __name__ == '__main__':
    app.run_server(debug=True) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...