Dash Plotly:在页面重新加载时保持下拉选择



我对python中的web开发很陌生,目前正在开发一个dash-plotly应用程序。在应用程序中,有一个下拉菜单供用户为图形中显示的数据选择特定的时间间隔。当刷新页面时,所选内容显然会返回到默认值。此简化代码显示下拉设置:

import dash_core_components as dcc
app = dash.Dash(__name__)
app.layout = html.Div(
dcc.Store('memory-intervals', storage_type='session')
dcc.Dropdown(
id='time',
options=get_intervals(),
value=Interval.DAY.value,
multi=False,
),
)

我现在的理解是,我可以通过dash的store组件在浏览器会话中存储数据。我设法存储了这样的选择:

@app.callback(
Output('memory-intervals', 'data'),
Input('time', 'value'),
)
def select_interval(interval):
if interval is None:
raise PreventUpdate
return interval

所以我陷入了困境。。。页面重新加载后,如何将商店的数据设置为选择值?

提前谢谢!

您可以使用Dash持久性功能。

根据文件:

persistence_type('local'、'session'或'memory';默认值为'local'(:持久的用户更改将存储在何处:

内存:仅保存在内存中,页面刷新时重置。这对例如,如果您有一个选项卡式应用程序,当不同的选项卡处于活动状态,并且您希望在切换时保留更改选项卡,但不是在重新加载应用程序之后。

local:使用window.localStorage。这是默认设置,并保留数据无限期地存在于该计算机的浏览器中。

会话:使用window.sessionStorage。与"local"一样,数据也会保留重新加载页面时,但在关闭浏览器或在新的浏览器选项卡中打开应用程序。

在您的示例中,如果您只需要在重新加载后保留下拉值,而不需要在退出浏览器或关闭选项卡后保留,则可以写下:

import dash_core_components as dcc
app = dash.Dash(__name__)
app.layout = html.Div(
dcc.Store('memory-intervals', storage_type='session')
dcc.Dropdown(
id='time',
options=get_intervals(),
value=Interval.DAY.value,
multi=False,
persistence = True,
persistence_type = 'session'
),
)

但是,如果您需要在该计算机的浏览器中无限期地保留选择,您可以简单地使用persistence=True,因为"本地"类型是默认类型。

我不知道这是否是最好的解决方案,但关于绘图文档,我设法做到了这一点:

@app.callback(
Output('time', 'value'),
Output('memory-intervals', 'data'),
Input('time', 'value'),
Input('memory-intervals', 'data'),
Input('memory-intervals', 'modified_timestamp'),
)
def select_interval(dd_interval, memory_interval, timestamp):
ctx = dash.callback_context
trigger_id = ctx.triggered[0]["prop_id"].split(".")[0]
if trigger_id == 'time':
interval = dd_interval
elif timestamp == -1 or memory_interval is None:
interval = Interval.DAY.value
else:
interval = memory_interval
return interval, interval

最新更新