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

Django表单提交数据未在目标页面显示问题求助

问题排查与修复

核心问题分析

  1. 表单提交目标错误:你的表单action指向了order视图,但表单处理逻辑(验证、添加数据到orders_stock)在form视图里。提交后直接进入order视图,完全没经过数据处理步骤,自然看不到新增数据。
  2. 重定向路径错误:form视图中处理完表单后,重定向到了模板文件路径form/orders.html,这不是正确的URL跳转方式,应该指向order视图的路由。
  3. 表单无效时的响应缺失:表单验证失败时,没有把错误的表单对象返回给页面,用户无法看到验证错误提示。

分步修复

1. 修正表单提交目标(form.html)

把表单的action改为指向处理逻辑所在的form视图:

<form action="{% url 'formsubmit:form'%}" method="post">
    {% csrf_token %}
    {{form}}
    <input type="submit" value="Submit">
</form>

2. 修正视图中的重定向逻辑(views.py)

首先导入reverse用于生成正确的URL,然后修改表单处理完成后的重定向代码,同时修复表单无效时的响应:

from django.shortcuts import render, HttpResponseRedirect, reverse  # 新增reverse导入
from django import forms 

# Create your views here.

orders_stock = ['headphones', 'earbuds', 'diy tools']

class NewOrder(forms.Form):
    get_order = forms.CharField(label='Your order', max_length=50)

def form(request):
    if request.method == 'POST':
        item = NewOrder(request.POST)
        if item.is_valid():
            get_order = item.cleaned_data['get_order']
            orders_stock.append(get_order)
            # 重定向到order视图的URL,而不是模板路径
            return HttpResponseRedirect(reverse('formsubmit:order'))
        else:
            # 返回带错误信息的表单对象,而不是只传items
            return render(request, 'form/form.html', {
                'form': item,
                'items': orders_stock
            })

    return render(request, 'form/form.html', {
        'form': NewOrder()
    })

def order(request):
    return render(request, 'form/orders.html', {
        'items': orders_stock,
    })

3. 额外优化(可选,但重要)

全局变量orders_stock在多用户访问时会出现数据混乱(比如多个用户提交的订单会互相覆盖或混合),建议使用**会话(session)**来存储用户专属订单:

def form(request):
    # 初始化session中的订单列表
    if 'orders_stock' not in request.session:
        request.session['orders_stock'] = ['headphones', 'earbuds', 'diy tools']
    
    if request.method == 'POST':
        item = NewOrder(request.POST)
        if item.is_valid():
            get_order = item.cleaned_data['get_order']
            request.session['orders_stock'].append(get_order)
            request.session.modified = True  # 告诉Django session已修改
            return HttpResponseRedirect(reverse('formsubmit:order'))
        else:
            return render(request, 'form/form.html', {
                'form': item,
                'items': request.session['orders_stock']
            })

    return render(request, 'form/form.html', {
        'form': NewOrder(),
        'items': request.session['orders_stock']
    })

def order(request):
    # 确保session中有订单列表
    if 'orders_stock' not in request.session:
        request.session['orders_stock'] = ['headphones', 'earbuds', 'diy tools']
    return render(request, 'form/orders.html', {
        'items': request.session['orders_stock'],
    })

验证修复效果

  1. 重启Django服务器
  2. 访问表单页面,提交订单
  3. 提交后会跳转到订单页面,此时能看到新增的订单数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:40:02