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

Flask表单提交后如何保留textarea中已输入的文本内容?

表单提交后保留textarea输入内容的实现方法

问题本质

提交表单后调用render_template时,没有将用户已提交的文本内容传回前端模板,textarea渲染时无预填充值,重载后自然显示为空。

具体修改方案

1. 调整后端路由逻辑(views.py)

无论GET/POST请求,渲染模板时都要传入textarea对应的填充值:首次GET访问传空字符串,POST提交后传用户刚提交的内容即可。
修正后的代码:

@views.route('/', methods=['GET', 'POST'])
def home():
    query_content = ""
    if request.method == 'POST':
        query_text = request.form.get('query_text', '')
        # 注意:原代码直接add字符串不符合SQLAlchemy语法要求,需替换为对应模型实例
        # 示例:如果存储查询的模型为SearchQuery,内容字段为content,写法为 db.session.add(SearchQuery(content=query_text))
        db.session.add(query_text)
        db.session.commit()
        query_content = query_text

    return render_template("home.html", query_content=query_content)

2. 调整前端模板(home.html)

和input标签不同,textarea的默认值需要写在标签闭合前的位置,直接输出后端传入的变量即可,Jinja2默认开启自动转义,无需额外处理XSS风险。
修正后的表单代码:

<form method="POST">
  <textarea name="query_text" id="query_text" class="form-control">{{ query_content }}</textarea>
  <button type="submit" name="submit" class="btn btn-primary">Submit</button>
</form>

补充说明

  • 如果后续要改成POST后重定向的PRG模式(避免表单重复提交),需要先把提交的query_text存入session或者flash消息,重定向到GET路由后再取出值传给模板,否则重定向产生的新GET请求无法获取上次POST的表单数据。
  • 原代码中db.session.add(query_text)存在语法问题:SQLAlchemy的add方法仅接收模型类实例,不能直接传入字符串,实际运行会报错,记得替换为对应模型的实例化操作。

内容的提问来源于stack exchange,提问作者Nicholas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:57:49