#forms #plot #callback #nested #plotly-dash
Вопрос:
У меня есть приложение dash для загрузки формы и графика на основе параметров.
Я использую обратный вызов для загрузки параметров формы, так как для извлечения данных из базы данных требуется некоторое время.
Он будет иметь начальный график с использованием параметров по умолчанию. После первой загрузки, когда пользователь меняет параметры, он должен обновить график. Однако он также перезагружает саму форму, а это не то, что я хочу. Но я не знаю, как остановить повторную загрузку формы.
Коды следующие:
import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_bootstrap_components as dbc
import time
from dash.dependencies import Input, Output, State
app = dash.Dash(name,suppress_callback_exceptions=True)
app.layout = html.Div([
dcc.Loading(
children=html.Div(
id=‘form’,
)),
html.Div(id='project-id')
])
@app.callback(dash.dependencies.Output(‘form’, ‘children’),
dash.dependencies.Input(‘project-id’, ‘children’)
)
def load_form(project_id):
time.sleep(2) # indicate it takes some time to load the data, it takes the
#project id to create the tissues, for simplicity, i use a simple list
#instead
tissues = [‘A’,‘B’,‘C’]
return (
dbc.Form(
children=dbc.FormGroup([
dbc.Label(‘Tissue’,html_for=‘tissue’),
dcc.Dropdown(
options=[
{‘label’: c, ‘value’: c} for c in tissues
] ,
id=‘tissue’,
value=‘A’
)
])
),
dcc.Loading(
children=html.Div(
id=‘my-plot’
)
),
)
@app.callback(dash.dependencies.Output(‘my-plot’, ‘children’),
[dash.dependencies.Input(‘tissue’, ‘value’)])
def load_plot(tissue):
time.sleep(2) # it takes the tissue and generate a plot, here
#i use text
# to represent the changes in tissue
return html.Div([
html.H1('you choose ’ tissue)
])
if name == ‘main’:
app.run_server(port=8882, debug=True)
Идея заключается в следующем: есть форма, затем основывайтесь на параметрах формы для загрузки графика, здесь я просто использую текст для замены, чтобы построить график для простоты.
Когда я запускаю описанные выше сценарии, сначала он загружается нормально. Тем не менее, когда я изменю опцию выпадающего списка, я ожидаю, что форма( id= «форма») останется, перезагрузится только сюжет(id= «мой-сюжет»), т. е. первый ответный звонок только один раз. Но это не так, и форма, и сеанс my-plot перезагружены. Это очень странно.
Как я могу заставить форму загружаться только один раз?
Любые советы очень приветствуются.
Заранее благодарю! Гринфилд