Pass Variable from one page to another after introduction of multi-page apps

I am looking to pass variables between pages in a multi-page application. It looks like others did this previously (Multi-page app with session state) before the launch of the Multi-page application in June 2022 (Introducing multipage apps! πŸ“„). Has anyone come across a method for passing variables between pages using the new architecture?

My application is setup with:

my_app
β”œβ”€β”€ streamlit_app.py    <-- Your main script
└── pages
    β”œβ”€β”€ page_2.py       
    └── page_3.py       

I want the user to make selections on each of the pages that then updates the others by propagating the selections that have made previously. Additionally, I would like the input values to remain if a user navigates away from a page and then back to it.

Any help here would be great!

Thanks!

Ended up figuring it out. Turns out that the st.session_state will propagate across pages under the new structure.

For reference on st.session_state - Session State - Streamlit Docs

1 Like

Hi @ryanczarny, I am trying to do similar thing. Let’s say I have a variable in page 2 which I pass in page 3. However, my idea is if that variable (a user input) is equal to a specific value then it does a specific task in page 3 else it does another task. For first time it is doing in exact way what I want but if the user change the input (variable), the session_state still holds the old value. So Instead of the other task, it still do the same task.

hey @DebayanPaul93, I ended up finding a way around that but having buttons that either save the filter value or erase the session value.

Before adding a new input I have the code do the below -

if 'user_select_value' not in st.session_state:
    st.session_state['user_select_value'] = 0 #or whatever default
user_select_value = st.session_state['user_select_value']

I then add the below -

if st.button('Save Filters'):
        st.session_state['user_select_value'] = user_select_value

if st.button('Clear page Filters'):
        st.session_state['user_select_value'] = 0 # or default value

There might be a better way of doing it, but that is how I got it to work for me.

Hi @ryanczarny, I ended up declaring the variable which I want to pass in global scope in page 2 (first input page) and return it through a function in the other page (second page)