使用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列表。
修改步骤:
- 打开
order.html,将表单的action修改为指向card:order:
<form action="{% url 'card:order' %}" method="post">
- 保存后重新测试:提交表单时,数据会发送到
order视图,经过验证后添加到items列表,再重定向到carditems页面,此时就能看到新增的条目了。
注意:全局变量
items仅适合本地测试,生产环境中应使用数据库存储数据,避免多线程/进程导致的数据不一致问题。
内容的提问来源于stack exchange,提问作者Errachdi
相关产品推荐
相关产品推荐

