返回(重定向)到错误的表单

时间:2012-07-19 17:36:30

标签: django forms redirect

我有两个视图/ 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?

1 个答案:

答案 0 :(得分:4)

如果您的表单数据不大,可能您可以将提交的数据存储在会话/ cookie中,并将用户重定向到/home。查看/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.