Django表单错误处理:错误的url?is_valid()



大家好,

我被Django的表单处理激怒了,如果表单提交到新页面并且表单验证失败。我打算返回到先前提交的表单,并显示错误消息以进行更正。

将显示错误消息,但url链接没有更改。我如何改变is_valid()语句*的*else语句,以便重定向到以前的形式?

谢谢你的建议!

urls . py

urlpatterns = patterns("",
    url(r"^add/$", "remap.views.add_project", name="add_project_location"),
    url(r"^add/details/$", "remap.views.add_project_details", name="add_project_details"),
)

views.py

def add_project_details(request):
if request.method == 'POST': # If the form has been submitted...
    locationForm = LocationForm(request.POST) 
    if locationForm.is_valid(): # All validation rules pass
        locality = locationForm.cleaned_data['locality']
        state = locationForm.cleaned_data['state']
        country = locationForm.cleaned_data['country']
        projectForm = ProjectForm(initial = { 
            'locality': locality, 
            'state': state, 
            'country': country, 
        })
        return render_to_response('map/add_project_details.html', {
            'projectForm': projectForm,
        }, context_instance = RequestContext(request))
    else:
        print locationForm.errors 
        return render_to_response('map/add_project_location.html', {
            'locationForm': locationForm,
        }, context_instance = RequestContext(request))
else:
    return HttpResponseRedirect('../') # Redirect to the location reg if site is requested w/o proper location 

我们没有理由对Django做的事情感到恼火。

您的重定向在if request.method == 'POST'对应的else子句上。因此,只有当这不是一个表单提交时,它才会生效。换句话说,该视图永远不会实际显示空表单。

然后,根据post表单是否有效,显示两个模板中的一个。此时您没有做任何重定向。

然而,即使你要求Django在表单无效时重定向,我也怀疑你会得到你想要的结果。这是因为HTTP(而不是Django)的规则说你不能重定向POST -所以你对重定向视图的请求将是一个GET,没有任何无效数据或错误消息。

你不能更新url,除非你告诉浏览器做重定向。你在同一个url上返回了两个不同的html版本,这会让用户感到困惑。

你应该做的是有两个视图。/add url和add_project_location视图将接受一个post并进行验证,并保持在该url和视图上,直到成功。

成功后,它将设置一些会话变量,重定向到add_project_details页面。由于浏览器的工作方式,像这样合并它们是不可能的。

相关内容

  • 没有找到相关文章

最新更新