Streamlit 멀티페이지 앱 — 앱을 여러 페이지로 나누기
Streamlit 멀티페이지 앱 — 앱을 여러 페이지로 나누기
앱이 커지면 화면 하나에 다 넣기보다, "홈", "설정", "데이터" 같은 페이지로 나누고 싶어져요. Streamlit은 멀티페이지 앱을 만드는 두 가지 방법을 제공해요 — **st.Page와 st.navigation**을 쓰는 권장 방법, 그리고 pages/ 디렉토리를 쓰는 방법이에요.
출처: https://docs.streamlit.io/develop/concepts/multipage-apps
st.Page와 st.navigation (권장)
이 방법은 프로젝트 디렉토리를 유연하게 정리하고 페이지 라벨도 마음대로 붙일 수 있어요. 엔트리포인트 파일에 st.navigation으로 내비게이션을 정의하고, 각 페이지는 st.Page로 감싸요.
import streamlit as st
pg = st.navigation([
st.Page("page1.py", title="Home", url_path="home", default=True),
st.Page("page2.py", title="Preferences", url_path="settings"),
])
pg.run()
st.navigation은 st.Page 객체 리스트를 받아 현재 페이지를 결정하고, pg.run()이 그 페이지를 실행해요. url_path로 URL을 정하고 default=True로 첫 화면을 골라요.
pages/ 디렉토리 방법
엔트리포인트 파일 옆에 pages/ 폴더를 만들고, 그 안에 파이썬 파일들을 두면 됩니다. 이 파일들은 자동으로 앱의 사이드바에 내비게이션으로 나타나요.
your_app/
├── streamlit_app.py # 엔트리포인트
└── pages/
├── 1_📈_Chart.py
└── 2_📊_Data.py
위젯과 페이지
멀티페이지 앱에서 위젯의 정체성은 페이지에 묶여 있어요. 같은 key를 쓰더라도 페이지마다 위젯 상태가 분리되는 경우가 있어서, 원하는 동작에 맞는 전략이 필요해요. 위젯을 공유하고 싶으면 세션 스테이트를 활용하면 됩니다.
더 알아보기
st.Page/st.navigation와 pages/ 디렉토리의 세부 비교는 공식 Multipage apps 문서에서 확인할 수 있어요.