为何Django代码无法将表单提交的task追加至tasks列表?
解决Django表单无法追加任务到列表的问题
你的代码里有两个大小写敏感的错误,这是导致表单提交后任务无法追加的直接原因:
- 请求方法判断错误:Django中
request.method返回的是大写的HTTP方法字符串,你写的request.method == "post"永远不会成立,应该改成request.method == "POST"。 - 表单数据获取错误:获取POST提交的数据应该用
request.POST(大写POST),而不是request.post,这是Django HttpRequest对象的内置属性,大小写不能错。
另外要注意:全局变量tasks只能在开发测试时临时使用,实际生产环境中绝对不能这么做——Django是多进程/多线程架构,全局变量的状态不会在不同请求间保留,而且多个用户会共享这个列表,数据会混乱。正确的做法是用Django的ORM创建数据库模型来存储任务。
修正后的核心代码
def add(request): if request.method == "POST": # 修正为大写POST form = NewTaskForm(request.POST) # 修正为request.POST if form.is_valid(): task = form.cleaned_data["task"] tasks.append(task) return HttpResponseRedirect(reverse("task:index")) else: return render(request, "task/add.html", { "form": form }) return render(request, "task/add.html",{ "form": NewTaskForm() })
正式环境的最佳实践(用数据库存储任务)
如果要做正式的任务管理功能,建议先创建Task模型:
# 在app的models.py中 from django.db import models class Task(models.Model): content = models.CharField(max_length=200) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.content
然后修改视图代码,用ORM操作数据库:
from .models import Task def add(request): if request.method == "POST": form = NewTaskForm(request.POST) if form.is_valid(): task_content = form.cleaned_data["task"] Task.objects.create(content=task_content) # 存入数据库 return HttpResponseRedirect(reverse("task:index")) # 其他代码不变 def index(request): tasks = Task.objects.all() # 从数据库获取所有任务 return render(request, "task/index.html", {"tasks": tasks})
内容的提问来源于stack exchange,提问作者Youssefwolf
相关产品推荐
相关产品推荐

