2

我用过 Django 表单。我有这个功能views.py

def func(request):
    if request.method == "POST":
        form = MyForm(request.POST)
        if form.is_valid():
            //do processing            
            return HttpResponseRedirect('/')
    else:
        form = MyForm()
        return render_to_response("checkbox.html", RequestContext(request, {'form':form}))

但是当表单无效时,它会向我显示错误:The view didn't return an HttpResponse object.我已经搜索并实现了每个视图功能都是这样的,但我不知道为什么我的有错误。它似乎不知道该怎么办,而表格无效!为什么它不显示页面并向用户显示表单错误?你能帮我么?

4

2 回答 2

4

当表单无效时,视图只会返回,因为elseif 语句的一部分仅在 is 时才被评估request.method == "POST"False它不是...

为了解决这个问题,以下是制作表单视图的常用模式:

def func(request):
    if request.method == "POST":
        form = MyForm(request.POST)
        if form.is_valid():
            //do processing            
            return HttpResponseRedirect('/')
    else:
        form = MyForm()

    # outside of the else clause
    # if the form is invalid, then it will also show the error messages to the user
    return render_to_response("checkbox.html", RequestContext(request, {'form':form}))
于 2012-10-26T17:22:26.117 回答
3

你已经在@miki725 帖子上得到了答案。只是一个建议,您可能希望将其视为GET避免这些行为的默认行为if .. else

def func(request):
    # GET is the default behaviour
    form = MyForm()

    if request.method == "POST":
        form = MyForm(request.POST)
        if form.is_valid():
            //do processing            
            return HttpResponseRedirect('/')

    return render_to_response("checkbox.html", RequestContext(request, {'form':form}))
于 2012-10-26T17:26:22.853 回答