Django:ValueError at /“视图To_do_list_app.views.home没有返回HttpResponse对象。而是返回了None。”

时间:2018-12-05 12:15:44

标签: python-3.x django-models django-forms django-views

请,我是新手,如果我问得不好,请告诉我。

我正在使用待办事项列表应用程序。

任何时候,我都会在Web应用程序上的表单中添加新任务和时间并提交,然后出现以下错误:

ValueError位于/ 视图To_do_list_app.views.home没有返回HttpResponse对象。它返回None。

下面是我的views.py文件

from django.http import HttpResponse
from django.shortcuts import render,redirect

from .forms import ListForm
from .models import List

def home(request):
    if request.method == "POST":
        form = ListForm(request.POST or None )
        if form.is_valid():
            form.save()
            act = List.objects.all
            context = {
                "act":act
            }
            return render(request,"home.html",context)
    else:
         act = List.objects.all
         context = {
              "act":act
         }
         return render(request,"home.html",context) 

这也是我的forms.py文件

from django import forms
from .models import List

class ListForm(forms.ModelForm):
    class Meta:
        model = List
        fields = "__all__"

这是我的models.py文件

from django.db import models
class List(models.Model):
    activity = models.CharField(max_length=200,primary_key=True)
    completed = models.BooleanField(default=False)
    time = models.DateTimeField()

    def __str__(self):
        return self.activity 

这是home.html脚本(仅是html标记形式)

<form class="form-inline my-2 my-lg-0"   method="POST">
{% csrf_token %}
    <input class="form-control mr-sm-2"  type="text" placeholder="Add New 
     Task" name="activity">
     <input type = "datetime-local" name = "time" >
     <button class = "btn btn-primary my-2 my-sm-0" type="submit">Add New Task</button>
 </form>

1 个答案:

答案 0 :(得分:0)

我已将您的代码完全集成到我的环境中,仔细检查了代码并测试了一些内容。如果您将views.py的代码更改为以下代码,我认为它将解决您的问题:

from django.shortcuts import render
from .forms import ListForm
from .models import List


def index(request):
    act = ''
    if request.method == "POST":
        form = ListForm(request.POST or None)
        if form.is_valid():
            form.save()
            act = List.objects.all
            return render(request, 'myApp/home.html', {"act": act})
    else:
        act = List.objects.all
    return render(request, 'myApp/home.html', {"act": act})

resume :(您必须在index-method(或home方法)中创建一个全局变量,并将其设置为空字符串。此外,您实际上并不需要使用上下文变量,也可以在内联方式,它将减少您的代码花费。最后但并非最不重要的一点是,您必须花费一次最后的返回值,因为那是该方法的真正返回值。否则,该方法仅给出带有返回值的if-结构。