2

我有两个视图 /home 和 /home/addItem

/home 包含一个用于创建新项目的表单,并将数据 POST 到 /home/addItem,如果数据验证 addItem 将用户重定向回 /home,如果数据不验证会出现问题:

我仍然希望用户返回 /home 上的表单,但我希望表单包含输入的表单数据以及通知用户要修复的表单错误。

我能找到的大多数地方都建议:

def addItem(request):
    form = NewItemForm(request.POST)
    if(form.is_valid()):
         #do stuff
         return HttpResponseRedirect("/home")
    return render_to_response("home-template.htm", {'form':form})

但是,此解决方案将在显示 /home 内容时将用户留在 /home/addItem 上,这在我的情况下效果不佳。

那么如何将用户连同表单内容和错误一起发送到 /home?

4

1 回答 1

4

如果您的表单数据不大,可能您可以将提交的数据存储在 session/cookie 中并将用户重定向到/home. View for/home可以检查会话/cookie 中是否存在任何表单数据,并向用户显示包含先前提交的数据和任何错误的表单。

示例代码(检查错误,存储/删除 cookie 的最佳方法):

def addItem(request):
    form = NewItemForm(request.POST)
    if form.is_valid():
       #OK
       return HttpResponseRedirect("/home")
    else:
       request.session['form_data'] = request.POST #this may not be exact way, please verify.
       return HttpResponseRedirect("/home")

 def home(request):
    form_data = request.session.get('form_data', None)
    form = NewItemForm(initial=form_data)
    form.is_valid() # to get errors in form
    #render form using template.
于 2012-07-19T17:48:31.830 回答