【问题标题】:Django: ValueError at/ "The view To_do_list_app.views.home didn't return an HttpResponse object. It returned None instead."Django:ValueError at/“视图 To_do_list_app.views.home 没有返回 HttpResponse 对象。它返回了 None 。”
【发布时间】:2023-03-17 16:11:01
【问题描述】:

拜托,我是新手,如果我的问题问得不好,请告诉我。

我正在开发一个待办事项列表应用程序。

任何时候,我在我的网络应用程序的表单中添加一个新任务和时间并提交,我都会收到以下错误:

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 脚本(只有 form 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>

【问题讨论】:

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


    【解决方案1】:

    我已将您的代码完全集成到我的环境中,仔细检查了您的代码并测试了一些东西。如果您将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 方法)中创建一个全局变量并将其设置为一个空字符串。而且你真的不需要使用 context 变量,你也可以在内联方式,它将花费您更少的代码。最后但并非最不重要的一点是,您必须将最后一个返回值缩进一次,因为那是该方法的真正返回值。否则该方法只会给出一个带有返回值的 if 结构。.)

    【讨论】:

    • 我刚刚做了,我收到了这个错误:UnboundLocalError at / local variable 'context' referenced before assignment
    • 好的,很抱歉。我没有将该部分正确复制到stackoverflow。它们被正确缩进。
    • 您可以编辑您的帖子以便我看到正确缩进的代码吗?如果你这样做,就会更容易理解你收到错误的原因。
    • 兄弟,请不要生气,我的笔记本电池没电了。当我获得权力时,我会编辑代码并让你知道。请耐心等待我。
    • 所以您想通过带有 datetime-local 字段的表单在数据库中插入数据,对吗?如果是这样,我想我可以帮助你,但如果你在另一个问题中问这个会更好,因为我认为我的代码已经解决了你在标题中写的问题。如果是这样,接受并向上投票并问另一个基于使用 datetime-local 在 Django 中的 DateTimeField() 中插入数据的问题。
    猜你喜欢
    • 2021-09-01
    • 2019-11-27
    • 2021-04-22
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多