Hello! I was wondering if it was possible to create session states in a loop. for example: for each item in a list, generate a session state and for each session state show a unique input text field.
Thanks in advance!
Hello! I was wondering if it was possible to create session states in a loop. for example: for each item in a list, generate a session state and for each session state show a unique input text field.
Thanks in advance!
Hi Caio and welcome
It is possible to create and track multiple session states but it requires a modification to the [not officially supported!] SessionState gist. I did this to maintain a stack of states, one for each ‘page’ class in a multiple page application. There is a summary and a copy of the code here.
Note that this needs to be updated to reflect the new version of the SessionState gist for Streamlit 0.54 and above. That’s a simple copy/paste job but I’m not on my work machine at present.
I expect to have to refactor/replace this when Streamlit finalizes its session tracking approach.
Thank you for the quick response Kevin!
I have created a single state variable for each relevant variable beforehand and that works! But I have not been able to create session state variables in a loop. Not sure if it is a streamlit limitation or my own limitation trying to code this.
For example, user chooses a number from 1 to 10 from a number input box, if the number 8 is chosen, 8 separate text input boxes will be displayed, each with its own session state variable. My work around was if statements instead, but it makes the code a bit longer and less flexible.
Caio
If I have got this right you have two page runs, at least to start with. The first collects the number of text boxes (8), the second displays the 8 boxes. After that each time you get an input in a box the page reruns displaying all the boxes till you are done.
I don’t think you need a sessionstate per box for this. The function of the SessionState gist is to provide a hook to transfer information from one run to the next. The way I handle this kind of situation is to store the information I want available “next time” as an attribute of the returned SessionState object. That attribute can be a list or a dict etc. That’s a lot easier to construct and parse.
Kevin,
Yes, that is it! I will give it a try soon and let you know if I get anywhere.
Thanks again for the quick responses!
These cookies are necessary for the website to function and cannot be switched off. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms.
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us understand how visitors move around the site and which pages are most frequently visited.
These cookies are used to record your choices and settings, maintain your preferences over time and recognize you when you return to our website. These cookies help us to personalize our content for you and remember your preferences.
These cookies may be deployed to our site by our advertising partners to build a profile of your interest and provide you with content that is relevant to you, including showing you relevant ads on other websites.