python - 使用 Dash,有没有办法在页面的两个部分中重复相同的 id 组件?
问题描述
我正在使用 DASH 库,我正在尝试使用两个具有相同 id 的下拉过滤器,因此我可以过滤两者中的任何一个,它调用相同的回调,如果我更改一个,另一个也需要更改。但我不知道该怎么做。
谢谢。
解决方案
ID 应该是唯一的。布局中的重复 ID 是不允许的(如果您使用的是最新版本的 Dash)。如果布局中有重复的 id,Dash 会抛出异常。
相反,您应该给两个下拉列表一个唯一的 id,并通过它们的 id 在回调中包含这两个组件。
如果您想在另一个下拉列表值更改时更改一个下拉列表的下拉列表值,您可以使用dash.callback_context
:
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Output, Input
external_stylesheets = ["https://codepen.io/chriddyp/pen/bWLwgP.css"]
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(
[
dcc.Dropdown(
id="dropdown1",
options=[
{"label": "New York City", "value": "NYC"},
{"label": "Montreal", "value": "MTL"},
{"label": "San Francisco", "value": "SF"},
],
value="NYC",
),
dcc.Dropdown(
id="dropdown2",
options=[
{"label": "New York City", "value": "NYC"},
{"label": "Montreal", "value": "MTL"},
{"label": "San Francisco", "value": "SF"},
],
value="NYC",
),
html.Div(id="output"),
]
)
@app.callback(
Output("dropdown1", "value"),
Output("dropdown2", "value"),
Input("dropdown1", "value"),
Input("dropdown2", "value"),
prevent_initial_call=True
)
def update_output(dropdown1_value, dropdown2_value):
ctx = dash.callback_context
dropdown_id = ctx.triggered[0]['prop_id'].split('.')[0]
if dropdown_id == "dropdown1":
dropdown_values = dropdown1_value, dropdown1_value
elif dropdown_id == "dropdown2":
dropdown_values = dropdown2_value, dropdown2_value
return dropdown_values
if __name__ == "__main__":
app.run_server()
如果value
属性的dropdown1
改变触发回调并且value
属性的dropdown2
值改变,dropdown1
反之亦然。
prevent_initial_callback
设置为,True
所以我不必检查是否dash.callback_context.triggered
不是None
。您可能希望根据需要更改此设置。
推荐阅读
- electron - grpc 无法加载电子 - 无法找到原始文件
- java - 使用计数实现 JPA 投影
- typescript - 有没有办法判断 TypeScript 中是否不需要接口属性
- javascript - KML 层 - FETCH_Error
- python - 物品不存在时如何处理案例
- pytorch - 如何使用单个循环计算 pytorch 中两组特征之间的乘积?
- javascript - 如何从 Javascript OnClick 函数中排除以使链接本身有效?
- spring - 将参数传递给 Spring Cloud Dataflow 中的任务
- awk - 如果连续字段相同,AWK 会减去不同行中的不同字段
- javascript - 隐藏一次后输入不为空时不显示弹出框