Django:视图没有返回 HttpResponse 对象。它返回 None 代替

时间:2021-06-19 10:57:59

标签: django httpresponse

当我尝试使用我的“编辑”网址时,我不断收到此错误。

视图 to_do_list_app.views.edit 未返回 HttpResponse 对象。它返回 None 。

我的 url.py

urlpatterns = [
    path('', views.todo, name='todo'),
    path('delete/<job_id>', views.delete, name='delete'),
    path('cross_off/<job_id>', views.cross_off, name='cross_off'),
    path('uncross/<job_id>', views.uncross, name='uncross'),
    path('edit/<job_id>', views.edit, name='edit'),
]

从 django.db 导入 models.py

class Jobs(models.Model):
    # Relationships
    to_do_owner = models.ForeignKey("auth.User", on_delete=models.SET_NULL, blank=True, null=True)

    # Fields
    item = models.CharField(max_length=200)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.item +' | ' +  str(self.completed)

这是我的 veiws.py

from django.shortcuts import render, redirect
from .models import Jobs
from .forms import ListForm
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required

def edit(request, job_id):
    if request.method == 'POST':
        item = Jobs.objects.get(pk=job_id)
        form = ListForm(request.POST or None, instance=item)
        if form.is_valid() and request.POST['item'] != '':
            form.save()
            messages.success(request, request.POST['item']+ ' er blevet redigeret i din opgave list')
            return HttpResponseRedirect('todo')
    else:
        item =Jobs.objects.get(pk=job_id)
        context = {'item': item}
        return render(request, 'edit.html', context)

这里有我的模板 edith.html

<form class="d-flex" method="POST" action="{% url 'edit' item.id %}">
      {% csrf_token %}
        <input class="form-control me-2" type="search" placeholder="{{  item.item  }}"
               value="{{  item.item  }}" aria-label="Search" name="item">
        <input type="hidden" value="{{  user.username  }}" name="job_owner">
        <input type="hidden" value="{{  item.completed  }}" name="completed">
        <button class="btn btn-outline-secondary" type="submit">Rediger opgave</button>
    </form>

self.check_response(response, callback) 的输出是:

<块引用>

回调
<功能编辑在 0x7f07ac82b430> 回调参数 () callback_kwargs
{'job_id':'5'} 中间件方法 <0x7f07ac89b760处> 请求
回复
没有任何 自己
包裹的回调
<函数编辑在 0x7f07ac82b430>

1 个答案:

答案 0 :(得分:1)

你可以这样做:-

def edit(request, job_id):
    if request.method == 'POST':
        item = Jobs.objects.get(pk=job_id)
        form = ListForm(request.POST or None, instance=item)
        if form.is_valid() and request.POST['item'] != '':
            form.save()
            messages.success(request, request.POST['item']+ ' er blevet redigeret i din opgave list')
            return HttpResponseRedirect('todo')
    else:
        item =Jobs.objects.get(pk=job_id)

    context = {'item': item}
    return render(request, 'edit.html', context)

我编辑的内容:-最后两行缩进