Logo

dev-resources.site

for different kinds of informations.

Streamlit Part 10: Page Navigation Simplified

Published at
1/9/2025
Categories
webdev
python
streamlit
tutorial
Author
James
Categories
4 categories in total
webdev
open
python
open
streamlit
open
tutorial
open
Streamlit Part 10: Page Navigation Simplified

Navigating between pages in Streamlit is a powerful feature for building dynamic, multi-page applications. In this tutorial, we’ll explore page navigation in Streamlit, using the new st.navigation, st.page_link, and st.switch_page methods to create a seamless user experience.

Why Multi-Page Apps?

Streamlit wasn’t originally built as a multi-page application framework. However, as it evolved, the Streamlit team introduced features to support multi-page apps. These features simplify navigation and provide customizable options for dynamic web applications.

Setting Up the Project Structure

For this tutorial, our project structure follows this layout:

project/
β”‚
β”œβ”€β”€ app.py  # Main app file
β”œβ”€β”€ app_pages/
β”‚   β”œβ”€β”€ intro.py
β”‚   β”œβ”€β”€ navigation_intro.py
β”‚   β”œβ”€β”€ page_link_demo.py
β”‚   β”œβ”€β”€ switch_page_demo.py

Each file in the app_pages directory represents a separate page in the application.

Implementing Navigation: app.py

Let’s start by defining our pages in app.py. This file sets up the navigation menu using st.navigation.

# app.py
import streamlit as st

# Page Navigation
pages = [
    st.Page("app_pages/intro.py", title="Introduction", icon="πŸ‘‹"),
    st.Page("app_pages/navigation_intro.py", title="st.navigation", icon="🧭"),
    st.Page("app_pages/page_link_demo.py", title="st.page_link", icon="πŸ”—"),
    st.Page("app_pages/switch_page_demo.py", title="st.switch_page", icon="πŸ”€"),
]

# Adding pages to the sidebar navigation
pg = st.navigation(pages, position="sidebar", expanded=True)

# Running the app
pg.run()

With this setup, the sidebar navigation is automatically generated, displaying the specified pages with their icons.

Page 1: Introduction

The intro.py file serves as the homepage.

# app_pages/intro.py
import streamlit as st

def intro():
    st.title("Streamlit Page Navigation Tutorial")
    st.write("Welcome to this tutorial on Streamlit page navigation!")
    st.write("Use the sidebar to navigate between different pages.")

if __name__ == "__page__":
    intro()

When users visit this page, they’ll see an introduction to the app and instructions on how to navigate.

Page 2: Understanding st.navigation

The navigation_intro.py file explains how to use st.navigation.

# app_pages/navigation_intro.py
import streamlit as st

def navigation_intro():
    st.title("Introduction to st.navigation")
    st.write("The `st.navigation` function configures multi-page Streamlit apps.")
    st.code("""
pages = [
    st.Page("app_pages/intro.py", title="Introduction", icon="πŸ‘‹"),
    st.Page("app_pages/page1.py", title="Page 1", icon="1️⃣"),
    st.Page("app_pages/page2.py", title="Page 2", icon="2️⃣"),
]

pg = st.navigation(pages)
pg.run()
    """, language="python")
    st.write("This creates a sidebar menu with pages specified in the `pages` list.")

if __name__ == "__page__":
    navigation_intro()

Page 3: Using st.page_link

The page_link_demo.py file demonstrates linking between internal and external pages.

# app_pages/page_link_demo.py
import streamlit as st

def page_link():
    st.title("Using st.page_link")
    st.page_link("app_pages/intro.py", label="Go to Intro", icon="🏠")
    st.page_link("app_pages/page_link_demo.py", label="Refresh This Page", icon="πŸ”„")
    st.page_link("https://www.streamlit.io/", label="Visit Streamlit", icon="πŸš€")

if __name__ == "__page__":
    page_link()

This approach allows users to navigate within the app or to external resources.

Page 4: Programmatic Navigation with st.switch_page

The switch_page_demo.py file showcases programmatically switching pages.

# app_pages/switch_page_demo.py
import streamlit as st

def switch_page():
    st.title("Using st.switch_page")
    st.write("`st.switch_page` allows you to programmatically switch pages.")
    st.code("""
if st.button("Go to Intro"):
    st.switch_page("app_pages/intro.py")
    """, language="python")
    if st.button("Go to Intro"):
        st.switch_page("app_pages/intro.py")

if __name__ == "__page__":
    switch_page()

This method decouples navigation from the sidebar, offering more control over when and how users switch pages.

Conclusion

Streamlit’s navigation features make it easy to build user-friendly multi-page apps. With st.navigation, st.page_link, and st.switch_page, you can create intuitive and dynamic navigation experiences.

πŸ”— Get the Code: GitHub - jamesbmour/blog_tutorials
πŸ”— Related Streamlit Tutorials:JustCodeIt
🍻 Support my work: Buy Me a Coffee

Featured ones: