You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit应用中将表单数据以字典形式获取

Streamlit表单获取集合字典数据的实现方法

Streamlit原生表单对象没有直接提供form.data这类属性来一次性获取所有输入值,但可以通过以下两种简洁通用的方式实现需求:

方法一:利用st.session_state筛选表单数据

每个表单内的输入组件,只要指定了唯一key,其值会自动存入st.session_state。我们可以给表单内的组件key统一加上表单key作为前缀,提交时筛选出对应数据:

import streamlit as st
import requests

form = st.form(key="my_form")
# 给所有表单输入组件添加统一前缀的key
form.text_input("input 1", key="my_form_input_1")
form.text_input("input 2", key="my_form_input_2")
form.selectbox("选择选项", ["A", "B", "C"], key="my_form_select_1")
# 更多输入组件...

def submit():
    # 从session_state中筛选当前表单的所有数据,去除前缀
    form_data = {
        key.replace("my_form_", ""): value
        for key, value in st.session_state.items()
        if key.startswith("my_form_")
    }
    # 处理数据后发送请求
    requests.post("localhost:5000/form-submit", data=form_data)

form.form_submit_button("提交", on_click=submit)

方法二:封装组件创建与数据收集逻辑

如果需要更通用的封装,可以写一个辅助函数,在创建表单组件时同时记录key,提交时直接收集:

import streamlit as st
import requests

def create_form_with_data(form_key):
    form = st.form(key=form_key)
    component_keys = []
    
    # 自定义创建组件的函数,记录key
    def add_text_input(label):
        key = f"{form_key}_{label.replace(' ', '_')}"
        component_keys.append(key)
        return form.text_input(label, key=key)
    
    # 添加表单组件
    add_text_input("input 1")
    add_text_input("input 2")
    
    def submit():
        form_data = {key.replace(f"{form_key}_", ""): st.session_state[key] for key in component_keys}
        requests.post("localhost:5000/form-submit", data=form_data)
    
    form.form_submit_button("提交", on_click=submit)

# 使用封装好的函数
create_form_with_data("my_form")

这两种方法都能让你避免逐个定义变量,实现代码的简洁与通用化。

内容的提问来源于stack exchange,提问作者Peter Mølgaard Pallesen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:30:09