首页 > 解决方案 > Django - 表单无效时输入数据的先前页面

问题描述

当表单无效时,我可以让我的页面返回之前输入的信息吗?

视图.py

def MyView(request):
   [...code...]
   if request.method == 'POST':
      form = MyForm(request.POST or None)
      if form.is_valid()
         //do something and redirect to success page
      else:
         //back to the page with the information filled in by the user (HERE IS MY PROBLEM)

标签: djangoviewdjango-formsdjango-views

解决方案


该行form = MyForm(request.POST or None)创建了一个MyForm名为的对象form,并为其分配了请求数据——它有点像填写好的表格。该is_valid()方法检查表单中的错误并将特定错误添加到您的表单中,form因此现在这是一个已分配错误的填写表单。如果您想将此表单返回给用户,您应该将其添加到上下文中,因此考虑到它是基于标准 django 函数的视图,它应该如下所示:

def MyView(request):
   [...code...]
   if request.method == 'POST':
      form = MyForm(request.POST or None)
      if form.is_valid()
         form.save()
         return render(request, 'succes_page_template.html')
      else:
         return render(request, 'current_template.html', context = {'form': form}) 

如果form无效,用户看到的下一个页面是他填写表单的同一页面('current_template.html'),但所有字段都填充了他/她已经输入的数据,表单也将错误分配给特定字段,所以你可以打印它们。如果您是 Django 新手,我建议您从一开始就进入基于类的视图 - 它们为您完成了繁重的工作,并且重构 + 调试变得更加容易。这是链接欢呼!


推荐阅读