

新闻资讯
技术教程本文详解如何在 dash 多页应用中用 dcc.dropdown 替代默认的链接导航,实现下拉选择即跳转对应页面、同步更新 url 的功能,并兼容 use_pages=true 模式。
Dash 自带的 use_pages=True 机制极大简化了多页应用开发,但其默认仅支持
以下是完整、可运行的解决方案(基于 Dash ≥ 2.10,推荐使用 dash 原生模块而非旧版 dash_core_components):
import dash from dash import dcc, html, Input, Output, Dash, callback, page_registry import dash_bootstrap_components as dbc # 可选:提升 UI 体验 # 初始化应用,启用 pages 模式 app = Dash(__name__, use_pages=True, external_stylesheets=[dbc.themes.BOOTSTRAP]) # 构建下拉选项:从 page_registry 动态提取所有注册页面 dropdown_options = [ {"label": page["name"], "value": page["relative_path"]} for page in page_registry.values() ] # 主布局:含标题、下拉框、Location 组件(关键!)、page_container app.layout = html.Div([ dcc.Location(id="url", refresh=False), # 必须存在,用于读写当前路径 html.H3("Multi-Page App with Dropdown Navigation", className="text-center my-4"), dbc.Container([ dbc.Row([ dbc.Col([ dcc.Dropdown( id="page-dropdown", options=dropdown_options, value=dropdown_options[0]["value"] if dropdown_options else "/", clearable=False, className="mb-3" ) ], md=6, lg=4, className="mx-auto") ]), dash.page_container # 渲染当前页面内容 ], fluid=True) ]) # 【回调1】当 Dropdown 选中变化时,更新 URL(触发页面跳转) @callback( Output("url", "pathname"), Input("page-dropdown", "value"), prevent_initial_call=True ) def update_pathname(selected_path): return selected_path # 【回调2】当 URL 变化时,同步更新 Dropdown 的选中值(保持 UI 与 URL 一致) @callback( Output("page-dropdown", "value"), Input("url", "pathname"), prevent_initial_call=True ) def update_dropdown_value(pathname): # 确保 pathname 匹配某个已注册页面的 relative_path for page in page_registry.values(): if page["relative_path"] == pathname: return pathname return "/" # 默认回退到首页 if __name__ == "__main__": app.run(debug=True)
✅ 关键要点说明:
⚠️ 常见误区提醒:
至此,你已拥有一套健壮、可扩展、符合 Dash 最佳实践的下拉式多页导航方案——选择“Fruits”,URL 即变为 http://127.0.0.1:8050/fruits,且 dash.page_container 自动渲染 /fruits 对应的页面内容。