streamlit是一个用于快速构建web可化化界面的python库,主要可以用于快速验证算法或者模型的效果,也可以用来给内部的第三者提供一些方便的小工具,但是当工具变多时,如果一个工具启动一个全局实例,会导致后期维护麻烦,所以一般采用左侧定义目录菜单,然后根据菜单跳转到对应页面。
如何有效解决Streamlit多页面管理问题
老版本实现方案
在最初的几个版本之前,streamlit 使用了一种特殊的方式实现了多页面,将每一个功能模块的文件分别放入pages目录下,然后将文件名命名为 序号_icon_目录名.py 的格式,框架会自动进行解析。
目录的示例如下:
app.py # 这是你用 "streamlit run" 命令来运行的文件
└─── pages/ # 这是存放其他页面文件的目录
└─── 1_test1.py # 这是一个页面
└─── 2_😊_test2.py # 这是第二个页面
优缺点:使用方式简单,但是自定义比较差,还不能实现工具分组
新版推荐方案
在新版本的框架中,加入了 navigation 和 Page 这两个功能,通过进行组合,可以实现自定义的左侧目录,navigation方法的定义如下:
def navigation(
pages: list[StreamlitPage] | dict[SectionHeader, list[StreamlitPage]],
*,
position: Literal["sidebar", "hidden"] = "sidebar",
) -> StreamlitPage:
支持传入一个StreamlitPage 或者 一个 字典类型,如果传入数组类型,将直接进行渲染,如果传入字典,将根据字典中的分组进行渲染。
1、仅渲染一级菜单
在app.py中写入下面部分内容import streamlit as st ng = st.navigation([ st.Page('pages1/1_test1.py'), st.Page('pages1/2_test2.py'),] ) ng.run()
将上面的pages目录名改为pages1目录,实现效果如下:
2、二级菜单
修改上面app.py中的代码如下
import streamlit as st
ng = st.navigation(
{
"分类1": [st.Page('pages1/1_test1.py')],
"分类2": [st.Page('pages1/2_test2.py')],
}
)
ng.run()
实现效果如下:
总结
Streamlit 使用过程中对于较为复杂的场景使用还是有一定难度,但是官方也在不断的更新,添加更多的新功能,同时还有大量的社区插件支持,会越来越方便大家的使用。
Streamlit 作为一个强大且易用的 Python 库,在快速构建 Web 可视化界面、验证算法和模型效果方面,提供了极大的便利。通过最新的多页面导航功能,Streamlit 进一步提升了工具的组织性和可维护性,使得在复杂场景下的应用变得更加灵活和高效。虽然在某些复杂使用场景中可能仍有一定难度,但随着官方的持续更新和社区插件的不断丰富,Streamlit 将为用户带来更多功能和便利,逐步成为数据科学家和开发者不可或缺的工具之一。
延展阅读:
如何使用Ollama与AnythingLLM零成本搭建本地知识库?
淘宝京东电商客服如何更好地催单、跟单提升询单转化率和顾客体验?
咨询方案 获取更多方案详情