创建动态导航菜单
通过 st.navigation,可以轻松创建动态导航菜单。您可以在每次重新运行时更改传递给 st.navigation 的页面集,从而更改与之匹配的导航菜单。这是创建自定义、基于角色的导航菜单的便捷功能。
本教程使用 st.navigation 和 st.Page,它们是在 Streamlit 1.36.0 版中引入的。有关使用 pages/ 目录和 st.page_link 的旧版解决方法,请参阅使用 st.page_link 创建自定义导航菜单。Build a custom navigation menu with `st.page_link` - Streamlit Docs
应用概念
使用 st.navigation 和 st.Page 定义多页面应用程序。
创建基于角色的动态导航菜单
先决条件
您的 Python 环境中必须安装以下文件:
streamlit>=1.36.0
你应该有一个名为 your-repository 的干净工作目录。
您应该对 st.navigation 和 st.Page 有基本的了解。
摘要
在本示例中,我们将为多页面应用程序创建一个动态导航菜单,该菜单取决于当前用户的角色。为简化示例,您将抽象掉用户名和凭据的使用。取而代之的是使用选择框让用户选择角色并登录。
入口点文件 streamlit_app.py 将处理用户身份验证。其他页面将是代表账户管理(settings.py)的存根,以及与三种角色相关的特定页面: 请求者、响应者和管理员。请求者可以访问账户和请求页面。响应者可以访问账户和响应页面。管理员可以访问所有页面。
下面是我们要构建的内容:
your-repository/├── admin│ ├── admin_1.py│ └── admin_2.py├── images│ ├── horizontal_blue.png│ └── icon_blue.png├── request│ ├── request_1.py│ └── request_2.py├── respond│ ├── respond_1.py│ └── respond_2.py├── settings.py└── streamlit_app.py
代码
import streamlit as stif "role" not in st.session_state: st.session_state.role = NoneROLES = [None, "Requester", "Responder", "Admin"]#设定两个函数,这里登录和等出def login(): st.header("Log in") role = st.selectbox("Choose your role", ROLES) if st.button("Log in"): st.session_state.role = role st.rerun()def logout(): st.session_state.role = None st.rerun()role = st.session_state.role#这里我们分别设定不同界面的程序logout_page = st.Page(logout, title="Log out", icon=":material/logout:")settings = st.Page("settings.py", title="Settings", icon=":material/settings:")request_1 = st.Page( "request/request_1.py"