2 1 Creating Multi-Page Apps Explained
Key Concepts
- Multi-Page Apps: Streamlit applications with multiple pages.
- Page Navigation: Mechanism to switch between different pages.
- Session State: Persistent state across different pages.
- Page Configuration: Setting up individual pages within the app.
- URL Routing: Mapping URLs to specific pages.
Explanation
Multi-Page Apps
Multi-page apps in Streamlit allow you to create applications with multiple distinct pages. Each page can have its own unique content and functionality, providing a more organized and user-friendly experience.
Page Navigation
Page navigation enables users to switch between different pages within the app. This can be achieved using Streamlit's sidebar, buttons, or URL routing.
Session State
Session state allows data to persist across different pages within the same session. This is useful for maintaining user inputs, settings, and other variables as the user navigates through the app.
Page Configuration
Page configuration involves setting up individual pages within the app. Each page is typically defined in its own Python file, and the main app file handles the routing to these pages.
URL Routing
URL routing maps specific URLs to different pages within the app. This allows users to directly access specific pages by entering the corresponding URL.
Examples
Example 1: Basic Multi-Page App
import streamlit as st def page1(): st.title("Page 1") st.write("Welcome to Page 1!") def page2(): st.title("Page 2") st.write("Welcome to Page 2!") pages = { "Page 1": page1, "Page 2": page2, } st.sidebar.title("Navigation") selection = st.sidebar.radio("Go to", list(pages.keys())) page = pages[selection] page()
Example 2: Using Session State
import streamlit as st if 'counter' not in st.session_state: st.session_state.counter = 0 def page1(): st.title("Page 1") st.write("Counter:", st.session_state.counter) if st.button("Increment"): st.session_state.counter += 1 def page2(): st.title("Page 2") st.write("Counter:", st.session_state.counter) if st.button("Decrement"): st.session_state.counter -= 1 pages = { "Page 1": page1, "Page 2": page2, } st.sidebar.title("Navigation") selection = st.sidebar.radio("Go to", list(pages.keys())) page = pages[selection] page()
Example 3: URL Routing
import streamlit as st from streamlit.web.server import Server def page1(): st.title("Page 1") st.write("Welcome to Page 1!") def page2(): st.title("Page 2") st.write("Welcome to Page 2!") pages = { "/page1": page1, "/page2": page2, } def main(): path = st.experimental_get_query_params().get("page", ["/page1"])[0] if path in pages: pages[path]() else: st.error("Page not found") if __name__ == "__main__": main()
Analogies
Think of a multi-page app as a book with multiple chapters. Page navigation is like flipping through the pages of the book. Session state is like a bookmark that remembers your last read position. Page configuration is like organizing the chapters in a logical order. URL routing is like having a table of contents that allows you to jump directly to a specific chapter.
By mastering the creation of multi-page apps in Streamlit, you can build more complex and user-friendly applications that provide a seamless and organized user experience.