代码之家  ›  专栏  ›  技术社区  ›  hopieman

Django视图未返回httpresponse

  •  1
  • hopieman  · 技术社区  · 8 年前

    我有以下代码来处理一个简单的表单,我的视图没有返回http响应。

    我不知道我的代码怎么了。。

    def novo_material(request):
    current_page='material'
    if request.method =='POST':
        form = SystemInventoryUpdate(request.POST)
        if form.is_valid():
            name=form.cleaned_data['name']
            qty=form.cleaned_data['qty']
            unit=form.cleaned_data['unit']
            t= NewMaterial(name=name,qty=qty,unit=unit)
            t.save()
            return HttpResponseRedirect(reverse('material'))
    else:
        form=NewMaterial()
        return render(request,'novo_material.html',{'form':form})
    

    它引发了以下错误:

    The view dashboard.views.novo_material didn't return an HttpResponse object. It returned None instead.
    
    2 回复  |  直到 8 年前
        1
  •  4
  •   Haifeng Zhang    8 年前

    您处理请求是否为POST的情况,但未处理表单的条件(内部if else条件) 无效的 。

     if form.is_valid():
            name=form.cleaned_data['name']
            qty=form.cleaned_data['qty']
            unit=form.cleaned_data['unit']
            t= NewMaterial(name=name,qty=qty,unit=unit)
            t.save()
            return HttpResponseRedirect(reverse('material'))
     else:
        # NEED HANDLE THIS CASE WHEN FORM ISN'T VALID
        # DISPLAY ERRORS/REMINDERS ON THE SAME PAGE, ALARM USER THE INPUT
        # ARE INVLID
    
        2
  •  2
  •   Lemayzeur    8 年前

    什么时候 not form.is_valid() ,您不返回任何 HttpResponse 。。。

    def novo_material(request):
        current_page='material'
        if request.method =='POST':
            form = SystemInventoryUpdate(request.POST)
            if form.is_valid():
                name=form.cleaned_data['name']
                ''''''
                t= NewMaterial(name=name,qty=qty,unit=unit)
                t.save()
                return HttpResponseRedirect(reverse('material'))
    
            # No need to add `else` statement, the `return HttpResponseRedirect` above stops the `if`
            # when form is invalid, it will jump to return render, with form validations generated by Django
    
    
        else:
            form=NewMaterial()
        return render(request,'novo_material.html',{'form':form})