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