Streamlit recently released multi-page apps 🎉 where page filenames are the source of truth for page settings.
In this repository, we show a prototype on how to use a page_config.yaml to control the ordering, icons, and nesting of the pages in the sidebar of a multi-page Streamlit app.
Main features include:
- Decoupling page settings from filenames. No need to use indices or emojis in filenames to handle page titles, icons or ordering! You can name your Python scripts however you want.
- Controling the order of the pages. Adding pages in the config in the order you want them to appear in the app.
- Nesting related pages within a "section". Using
sections
in page_config.yaml will add un-clickable placeholders that group pages together. - Automatically adding the icon and title at the top of each page. Bringing consistency to your pages!
The easiest way to get started with this repo is to:
- Clone the repo
git clone https://github.com/blackary/mpa-config.git
- Change your working directory to the repo
cd mpa-config
- Install requirements
pip install -r requirements.txt
- Run the Streamlit app
streamlit run streamlit_app.py
- Play around with the page_config.yaml!
Then, when you get the hang of how the page_config.yaml works and you want to implement the same functionality into your own Streamlit app, you can:
- Copy the page_config.py file into your own Streamlit app
- Make your own page_config.yaml file in the same directory with your apps' information
- Import and add standard_page_widgets() to the top of your page scripts
With those changes, you should be indent, organize, and emojify your apps!
All it takes for your app to support this is to add this little Python code on top of all your page scripts:
import streamlit as st
from page_config import standard_page_widgets
# Add this on top of any page to make mpa-config work!
standard_page_widgets()
Supported parameters in page_config.yaml for pages
:
- page_name: Page name.
- icon: Emoji you want to use as an icon
- created_date: App automatically adds a 🆕 flag to the page title if it is under 30 days old!
- script_path: Path to your Streamlit script for that page. Defaults to
snake_case(page_name).py
- layout: Choose between 'wide' or 'centered'. Defaults to
'centered'
- deprecated: If true, the page will not be displayed in the app. Defaults to
'false'
Supported parameters in page_config.yaml for sections
:
- name: Section name
- icon: Emoji you want to use as an icon