ValueError:视图****没有返回HttpResponse对象。它返回 None 而不是

问题描述 投票:0回答:2

我正在使用 Django 表单来处理 Django 应用程序上某些点的用户输入。但每当用户尝试提交表单时,它都会显示此错误。

ValueError: The view *my view name goes here*  didn't return an HttpResponse object. It returned None instead

这是代码:

Forms.py

class sendBreachForm(forms.Form):
    """
    Form for sending messages to users.
    """
    text = forms.CharField(max_length=100)
    image = forms.FileField()
    cords = forms.CharField(widget=forms.TextInput(
        attrs={"type":"hidden"}
    ))

views.py

@login_required
def web_app(request):
    if request.user.is_staff or request.user.is_superuser:
        return redirect('/ar/system/')
    else:
        if request.method == "POST":
            form = sendBreachForm(request.POST)
            print("AAAAAAAAa in a post request")
            if form.is_valid():
                print("AAAAAAAAa form is valid")
                text = form.cleaned_data['text']
                image = form.cleaned_data['image']
                cords = form.cleaned_data['cords']
                try:
                    new_breach = Breach.object.create(text=text,image=image)
                    add_form_cords_to_breach(request,new_breach,cords)   
                    print("AAAAAAAA added breach")
                    return render(request,"web_app.html",context)         
                except :
                    print("AAAAAAAA error ")
                    return render(request,"web_app.html",context)   
                    # raise Http404('wrong data')
                    
        else:
            form = sendBreachForm()
            context = {}
            context['form']=form
            context['all_elements'] = WaterElement.objects.all()
            current_site = Site.objects.get_current()
            the_domain = current_site.domain
            context['domain'] = the_domain
            all_layers = MapLayers.objects.all()
            context['all_layers']=all_layers
            return render(request,"web_app.html",context)

HTML

                  <form method ='post'>
                    {% csrf_token %}
                    {{form.text}}
                    <label for="text">وصف المعاينة</label>
                    {{form.image}}
                    <label for="image">صورة المعاينة</label>
                    {{form.cords}}
                      <input type="submit" value = "إرسال المعاينة">
                </form>
python django django-views django-forms django-templates
2个回答
1
投票

该错误完全有道理,视图应该在所有条件下返回一些响应,目前您对所有内容都有

if
else
条件,除了
if form.is_valid()
之外,所以也保持这一点。

@login_required
def web_app(request):
    if request.user.is_staff or request.user.is_superuser:
        return redirect('/ar/system/')
    else:
        if request.method == "POST":
            form = sendBreachForm(request.POST)
            print("AAAAAAAAa in a post request")
            if form.is_valid():
                print("AAAAAAAAa form is valid")
                text = form.cleaned_data['text']
                image = form.cleaned_data['image']
                cords = form.cleaned_data['cords']
                try:
                    new_breach = Breach.object.create(text=text,image=image)
                    add_form_cords_to_breach(request,new_breach,cords)   
                    print("AAAAAAAA added breach")
                    return render(request,"web_app.html",context)         
                except:
                    print("AAAAAAAA error ")
                    return render(request,"web_app.html",context)   
                    # raise Http404('wrong data')
            else:
                print("form is not valid")
  
                messages.error(request,"form is not valid, kindly enter correct details")
                return redirect("some_error_page")
                    
        else:
            form = sendBreachForm()
            context = {}
            context['form']=form
            context['all_elements'] = WaterElement.objects.all()
            current_site = Site.objects.get_current()
            the_domain = current_site.domain
            context['domain'] = the_domain
            all_layers = MapLayers.objects.all()
            context['all_layers']=all_layers
            return render(request,"web_app.html",context)


0
投票

我也遇到了同样的错误,500 响应(内部服务器错误)。搜索了两天并观看了 youtube,问题原来是我的模板文件(index.html)中的错误。我错误地添加了 img src 属性,并用 still 注释该行并没有消除错误。我猜是因为 python 试图处理 {%静态里面!--。所以我建议在尝试添加 python 字典数据和额外的图像和 CSS 之前确保模板渲染一些简单的静态文本

© www.soinside.com 2019 - 2024. All rights reserved.