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

Django中如何跨视图(不同URL)传递表单提交的数据

解决Django表单提交后重定向并传递数据问题

你需要通过Session临时存储表单数据来实现重定向后的数据传递,因为重定向会发起新的GET请求,原POST请求的数据无法直接携带。具体修改如下:

1. 修改输入视图(input_view)

验证表单通过后,将清理后的表单数据存入Session,然后重定向到结果页面:

def input_view(request):    
    if request.method == "POST":
        simulation_form = SimulationSettings(request.POST)
        strategy_form = StrategySettings(request.POST)
        if simulation_form.is_valid() and strategy_form.is_valid():
            # 将清理后的数据存入Session
            request.session['simulation_settings'] = simulation_form.cleaned_data
            request.session['strategy_settings'] = strategy_form.cleaned_data
            # 重定向到结果视图对应的URL
            return redirect('strategy_simulator:results_view')
    else:
        simulation_form = SimulationSettings()
        strategy_form = StrategySettings()
    return render(
        request,
        "strategy_simulator/input_view.html",
        {"simulation_form": simulation_form, "strategy_form": strategy_form},
    )

2. 修改结果视图(results_view)

从Session中取出存储的数据,同时处理用户直接访问结果页的情况(无数据时重定向回输入页):

def results_view(request):
    # 从Session获取表单数据
    simulation_settings = request.session.get('simulation_settings')
    strategy_settings = request.session.get('strategy_settings')
    
    # 若Session中无数据,说明用户直接访问结果页,跳转回输入页
    if not simulation_settings or not strategy_settings:
        return redirect('strategy_simulator:input_view')
    
    # 用完数据后删除Session中的记录,避免刷新页面重复加载
    del request.session['simulation_settings']
    del request.session['strategy_settings']
    
    return render(
        request,
        "strategy_simulator/results_view.html",
        {"simulation_settings": simulation_settings, "strategy_settings": strategy_settings},
    )

说明

  • Session会自动处理数据序列化,表单cleaned_data中的常规数据(字符串、数字、日期等)都可以直接存入。
  • 删除Session数据是为了防止用户刷新结果页面时重复获取旧数据,也避免数据长期占用Session空间。
  • 如果表单数据不敏感,也可以通过GET参数传递,但不推荐(URL长度有限制且数据暴露)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:23:23