【问题标题】:Return (redirect) to form on error出错时返回(重定向)到表单
【发布时间】:2012-07-18 23:02:59
【问题描述】:

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

【问题讨论】:

    标签: django forms redirect


    【解决方案1】:

    如果你的表单数据不大,可能你可以将提交的数据存储在 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2012-02-27
      相关资源
      最近更新 更多