首页 > 解决方案 > Dash 确保 url 参数和下拉选择之间的一致性

问题描述

我有一个带有几个选项的下拉菜单,并且 multi=True。我希望选择反映在 URL 中,但我也希望能够使用 URL 选择选项。

dcc.Location(id='url',refresh=False)
...
dcc.Dropdown(id='hp-dropdown',
                 options=index,
                 clearable=False,
                 multi=True
                 )

当我在下拉列表中进行新选择时,我有一个更新 URL 的回调。

@app.callback(
    Output('url','search'),
    Input('hp-dropdown','value')
)
def update_url(hps):
    if isinstance(hps, str):
        return '?ids='+hps
    return '?ids=' +','.join(hps)

现在我想做的也是使用 URL 中的值更新下拉列表,就像这样。

@app.callback(
    Output('hp-dropdown','value'),
    Input('url','search')
)
def update_dropdown(search):
    return search[5:].split(',')

但是,由于循环回调,这是不可能的。我可以改用什么模式?这只是我第一次加载页面时的问题。如果我在 URL 中有一个选择,这不会反映在下拉列表中。

标签: pythonplotly-dash

解决方案


您可以添加一个按钮或其他需要用户激活的组件,以运行从 URL 更新下拉列表的回调(State在回调中将 URL 作为 a ,而不是Input)。然后流程将是按钮-> 选择-> URL。它不再是圆形的,因为按钮不会自动触发。


推荐阅读