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

Flask redirect跳转后如何将表单计算得到的列表传递到新页面展示

Flask redirect跳转页面携带列表数据的解决方案

你当前的代码无法获取列表t的核心原因是:HTTP请求是无状态的,redirect会触发浏览器发起全新的GET请求到/tdata路由,两个请求的上下文完全独立,无法直接共享变量。

以下是3种常用的实现方案,可根据你的业务场景选择:

方案1:使用Session存储(最推荐,适合大部分场景)

Flask自带的session可以在不同请求间持久化用户级别的数据,本质是加密存在Cookie里,安全方便。

操作步骤:

  1. 先给Flask应用配置SECRET_KEY,用于加密session数据
  2. 从flask模块导入session
  3. 在tcalc路由中把计算好的t存入session
  4. 在tdata路由中从session读取t即可

修正后的代码示例:

from flask import Flask, session, redirect, render_template, request

app = Flask(__name__)
# 必须配置SECRET_KEY,可自定义任意字符串
app.secret_key = 'your_custom_secret_key_here'

@app.route('/tcalc', methods=["GET", "POST"])
def tcalc():
    form = TCalcForm()
    if form.validate_on_submit():
        lng1 = form.lng1.data
        qty1 = form.qty1.data
        # 你的计算逻辑
        t = [t1, t2, t3]
        # 把t存入session
        session['t'] = t
        return redirect("/tdata")
    return render_template('tcalc.html', form=form)

@app.route('/tdata')
def tdata():
    # 从session读取t,不存在则默认给空列表
    t = session.get('t', [])
    # 可选:读取后清除session里的t,避免用户刷新页面重复显示旧数据
    session.pop('t', None)
    return render_template('tdata.html', t=t)

方案2:URL拼接查询参数(适合非敏感、长度较短的数据)

如果你的数据不敏感且长度很短,可以把列表转成字符串拼到跳转的URL后面,作为查询参数传递。

代码示例:

@app.route('/tcalc', methods=["GET", "POST"])
def tcalc():
    form = TCalcForm()
    if form.validate_on_submit():
        # 原有计算逻辑
        t = [t1, t2, t3]
        # 把列表转成逗号分隔的字符串拼到URL里
        t_str = ','.join(map(str, t))
        return redirect(f"/tdata?t={t_str}")
    return render_template('tcalc.html', form=form)

@app.route('/tdata')
def tdata():
    # 从查询参数读取并还原成列表
    t_str = request.args.get('t', '')
    t = t_str.split(',') if t_str else []
    # 如果你的t是数值类型,可自行转换类型
    # t = list(map(int, t))
    return render_template('tdata.html', t=t)

方案3:直接渲染模板(不需要跳转,适合不需要改变URL的场景)

如果你没有强制要求跳转后URL变成/tdata,可以省略redirect步骤,表单提交成功后直接渲染tdata模板,直接把t传进去即可。缺点是用户刷新页面会触发表单重复提交。

代码示例:

@app.route('/tcalc', methods=["GET", "POST"])
def tcalc():
    form = TCalcForm()
    if form.validate_on_submit():
        # 原有计算逻辑
        t = [t1, t2, t3]
        # 直接渲染tdata模板
        return render_template('tdata.html', t=t)
    return render_template('tcalc.html', form=form)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:27:02