Creating multipage apps using the pages/ directory

声明多页面应用的最可定制方法是使用Page and navigation。然而,Streamlit 还提供了一种无缝的方式来创建多页面应用,其中页面会自动识别并显示在应用侧边栏的导航小部件中。此方法使用pages/目录。

本页面假设您理解概述中介绍的页面术语

当你使用pages/目录时,Streamlit通过目录结构和文件名来识别你的多页面应用中的页面。你的入口文件(你传递给streamlit run的文件)是你的应用的主页。当你在入口文件旁边有一个pages/目录时,Streamlit会将其中的每个Python文件识别为一个页面。以下示例有三个页面。your_homepage.py是入口文件和主页。

your_working_directory/ ├── pages/ │ ├── a_page.py │ └── another_page.py └── your_homepage.py

像运行单页应用一样运行你的多页应用。将你的入口文件传递给streamlit run

streamlit run your_homepage.py

只有pages/目录中的.py文件会被识别为页面。Streamlit会忽略pages/目录及其子目录中的所有其他文件。Streamlit还会忽略pages/子目录中的Python文件。

priority_high

重要

如果你在应用程序中调用st.navigation(在任何会话中),Streamlit 将切换到使用更新的页面和导航多页面结构。在这种情况下,pages/目录将在所有会话中被忽略。除非你重新启动应用程序,否则你将无法恢复到pages/目录。

请参阅概述以了解Streamlit如何根据构成文件名的numberseparatoridentifier".py"扩展名分配自动页面标签和URL

入口文件总是首先显示。其余页面按以下方式排序:

  • 带有number的文件会出现在没有number的文件之前。
  • 文件根据number(如果有)排序,然后是label(如果有)。
  • 当文件排序时,Streamlit 将 number 视为实际数字而不是字符串。因此 033 相同。

此表显示了文件名及其对应标签的示例,按照它们在侧边栏中出现的顺序排序。

示例:

文件名渲染标签
1 - first page.py第一页
12 monkeys.py猴子
123.py123
123_hello_dear_world.py你好,亲爱的世界
_12 monkeys.py12只猴子
star

提示

表情符号可以用来让你的页面名称更有趣!例如,一个名为🏠_Home.py的文件将在侧边栏中创建一个标题为“🏠 Home”的页面。在文件名中添加表情符号时,最好包含一个编号前缀,以便在终端中更容易自动完成。终端自动完成可能会被Unicode(表情符号的表示方式)搞混。

  • 页面支持保存时运行。

    • 当你在应用运行时更新页面时,这会导致当前正在查看该页面的用户重新运行。
    • 当你在应用运行时更新页面时,应用不会自动为当前正在查看不同页面的用户重新运行。
  • 当您的应用程序运行时,添加或删除页面会立即更新侧边栏导航。

  • st.set_page_config 在页面级别工作。

    • 当你使用 st.set_page_config 设置 titlefavicon 时,这仅适用于当前页面。
    • 当你使用 st.set_page_config 设置 layout 时,该设置将在会话期间保持不变,直到通过另一个 st.set_page_config 调用进行更改。如果你使用 st.set_page_config 来设置 layout,建议在所有页面上调用它。
  • 页面全局共享相同的Python模块:

    # page1.py import foo foo.hello = 123 # page2.py import foo st.write(foo.hello) # 如果page1已经执行,这将输出123
  • 页面共享相同的 st.session_state

    # page1.py import streamlit as st if "shared" not in st.session_state: st.session_state["shared"] = True # page2.py import streamlit as st st.write(st.session_state["shared"]) # 如果 page1 已经执行,这将写入 True

你现在对多页面应用有了扎实的理解。你已经学会了如何构建应用、定义页面以及在用户界面中导航页面。是时候创建你的第一个多页面应用了!🥳

forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。