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