Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单错误处理:错误的url?_有效吗()_Django_Forms_Validation_Redirect - Fatal编程技术网

Django表单错误处理:错误的url?_有效吗()

Django表单错误处理:错误的url?_有效吗(),django,forms,validation,redirect,Django,Forms,Validation,Redirect,大家好 如果表单提交到新页面并且表单验证失败,Django表单处理会让我很恼火。我打算返回到先前提交的表单,并显示错误消息以进行更正 将显示错误消息,但url链接未更改。 如何更改is\u valid()语句*的*else语句,以便重定向到早期形式? 谢谢你的建议 url.py urlpatterns = patterns("", url(r"^add/$", "remap.views.add_project", name="add_project_location"), url

大家好

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

将显示错误消息,但url链接未更改。 如何更改is\u valid()语句*的*else语句,以便重定向到早期形式?

谢谢你的建议

url.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 

除非告诉浏览器进行重定向,否则无法更新url。您在同一url上返回两个不同的html版本,这可能会让用户感到困惑

你应该做的是有两种观点。/addurl和add_project_location视图将接受一个post并进行验证,在成功之前一直停留在该url和视图上


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

除非告诉浏览器进行重定向,否则无法更新url。您在同一url上返回两个不同的html版本,这可能会让用户感到困惑

你应该做的是有两种观点。/addurl和add_project_location视图将接受一个post并进行验证,在成功之前一直停留在该url和视图上


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

没有理由对Django完全按照它的设计去做感到恼火

重定向位于与if request.method==“POST”对应的
else
子句上。因此,它只有在不是表单提交的情况下才会生效。换句话说,该视图永远不会实际显示空表单

然后,根据发布的表单是否有效,显示两个模板之一。此时您没有进行任何重定向


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

没有理由对Django完全按照它的设计去做感到恼火

重定向位于与if request.method==“POST”对应的
else
子句上。因此,它只有在不是表单提交的情况下才会生效。换句话说,该视图永远不会实际显示空表单

然后,根据发布的表单是否有效,显示两个模板之一。此时您没有进行任何重定向

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