Streamlit范围滑块session_state异常:调整后重置默认值求助
解决Streamlit范围滑块重置问题的方案
核心就是用st.session_state持久化滑块的选择值,具体步骤和代码示例如下:
步骤1:获取基础日期参数
先从数据库查询最早发布日期,再获取当前日期作为滑块的边界:
import streamlit as st import datetime import sqlite3 # 这里用sqlite示例,可替换为你实际使用的数据库驱动 # 连接数据库并查询最早发布日期 conn = sqlite3.connect("your_db.db") cursor = conn.cursor() cursor.execute("SELECT MIN(publish_date) FROM your_table") min_date = cursor.fetchone()[0] conn.close() max_date = datetime.date.today()
步骤2:初始化session_state的日期范围
第一次加载应用时,把默认的日期范围存入session_state:
# 初始化session_state,若不存在则设置默认范围 if "date_range" not in st.session_state: st.session_state.date_range = [min_date, max_date]
步骤3:渲染范围滑块并绑定session_state
把滑块的value参数绑定到session_state里的变量,确保滑块值变化后被持久化:
# 渲染范围滑块,value绑定session_state中的值 selected_range = st.slider( "选择发布日期范围", min_value=min_date, max_value=max_date, value=st.session_state.date_range, format="YYYY-MM-DD" ) # 更新session_state,保存当前选中的范围 st.session_state.date_range = selected_range
步骤4:用保存的日期范围过滤内容
直接从session_state获取选中的日期范围,执行筛选查询并展示内容:
# 提取当前选中的起止日期 start_date, end_date = st.session_state.date_range # 执行筛选查询 conn = sqlite3.connect("your_db.db") cursor = conn.cursor() cursor.execute(""" SELECT content FROM your_table WHERE publish_date BETWEEN ? AND ? """, (start_date, end_date)) filtered_content = cursor.fetchall() conn.close() # 展示筛选后的内容 st.subheader("筛选后的内容") for content in filtered_content: st.write(content[0])
这样调整滑块后,页面重跑时session_state会保留你之前选择的日期范围,滑块就不会重置到默认值了。
内容的提问来源于stack exchange,提问作者JSRod
相关产品推荐
相关产品推荐

