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

使用Django Form收集的用户数据未在目标URL正常显示求助

问题:Django表单提交的数据无法在carditems页面显示

通过Django Form收集的用户数据无法在目标URL(carditems页面)按预期显示,以下是使用的代码:

views.py

from django.shortcuts import render, HttpResponseRedirect
from django.urls import reverse
from django import forms

# Item list
items = ['earbuds', 'rollerblades', 'camera']

class OrderForm(forms.Form):
    product = forms.CharField(label='Product', max_length=50)

def index(request):
    return render(request, 'card/card.html', {
        'items': items,
    })

def order(request): 
    if request.method == 'POST':
        form = OrderForm(request.POST)
        if form.is_valid():
            product = form.cleaned_data['product']
            items.append(product)
            return HttpResponseRedirect(reverse('card:carditems'))
        else:
            return render(request, 'card/order.html', {
                'form': form,
            })
    
    return render(request, 'card/order.html', {
        'form': OrderForm()
    })

order.html(用户填写订单页面)

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Order</title>
</head>
<body>
    <h2>Order Here</h2>
    <form action="{% url 'card:carditems' %}" method="post">
        {% csrf_token %}
        {{form}}
        <input type="submit" value="submit">
    </form>
</body>
</html>

card.html(订单显示页面)

{% extends 'card/layout0.html'%}

{% load static %}

{% block content %}

    <h2>Card Items</h2>
    <ul>
       {% for item in items %}
            <li> {{ item }} </li>
        {% endfor %}
    </ul>

{% endblock %}

urls.py

from . import views
from django.urls import path

app_name = "card"

urlpatterns = [
    path('', views.index, name='carditems'),
    path('order/', views.order, name='order')
]

解决方案

问题核心是表单提交的目标错误:当前表单的action指向了card:carditems(对应index视图),但index视图不处理POST请求,导致表单数据根本没经过order视图的验证和添加逻辑,自然无法更新items列表。

修改步骤:

  1. 打开order.html,将表单的action修改为指向card:order:
<form action="{% url 'card:order' %}" method="post">
  1. 保存后重新测试:提交表单时,数据会发送到order视图,经过验证后添加到items列表,再重定向到carditems页面,此时就能看到新增的条目了。

注意:全局变量items仅适合本地测试,生产环境中应使用数据库存储数据,避免多线程/进程导致的数据不一致问题。

内容的提问来源于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 10:27:43