【问题标题】:views.edit didn't return an HttpResponse object. It returned None insteadviews.edit 没有返回 HttpResponse 对象。它返回 None 而不是
【发布时间】:2020-11-23 21:03:38
【问题描述】:

我正在尝试在名为“website/edit1,2,3,4,...”的页面上编辑表单上的项目

在编辑表单项后单击“编辑”时,出现上述错误。网站上的所有错误都不像解决方案。我正在关注的教程(现在尝试添加我自己的编辑功能)说要导入 HttpResponseRedirect 而不是 HttpResponse ,就像在 S/O 的解决方案中一样。无论如何,这是views.py文件

from django.shortcuts import render, redirect
from .models import List
from .forms import ListForm
from django.contrib import messages
from django.http import HttpResponseRedirect

def home(request):
    all_items = List.objects.all
    return render(request, 'home.html', {'all_items': all_items})

def about(request):
    return render(request, 'about.html', {})

def edit(request, item_id):
    if request.method == 'POST':
        item = List.objects.get(pk=item_id)
        form = ListForm(request.POST or None, instance=item)
        if form.is_valid():
            form.save()
            messages.success(request, ('Item Had Been Edited'))
            return redirect('home')

    else:
        item = List.objects.get(pk=item_id)
        return render(request, 'edit.html', {'item': item})

def delete(request, item_id):
    item = List.objects.get(pk=item_id)
    item.delete()
    return redirect('home')

这是 urls.py 文件

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('about', views.about, name='about'),
    path('delete/<item_id>', views.delete, name='delete'),
    path('edit/<item_id>', views.edit, name='edit')
]

...和 forms.py 文件

from django import forms
from .models import List

class ListForm(forms.ModelForm):
    class Meta:
        model = List
        fields = ["First_name", "Surname", "Street", "Town", "Province", "Postal_code"]

【问题讨论】:

  • 如果form.is_valid() 返回False,您不会返回任何内容。通常您重新呈现表单。
  • else: ... return render(request, 'edit.html', {'item': item}) 可能缩进错误

标签: python django


【解决方案1】:

您忘记为无效表单添加 else 条件:

def edit(request, item_id):
    if request.method == 'POST':
        item = List.objects.get(pk=item_id)
        form = ListForm(request.POST or None, instance=item)
        if form.is_valid():
            form.save()
            messages.success(request, ('Item Had Been Edited'))
            return redirect('home')
        else:
            return render(request, 'edit.html', {'item': item})
    else:
        item = List.objects.get(pk=item_id)
        return render(request, 'edit.html', {'item': item})

【讨论】:

  • 现在我没有收到任何错误。当我在管理字段中编辑项目时,它会显示在前端
【解决方案2】:

如果方法尚未发布,您的条件应该是下一步。

else:
    item = List.objects.get(pk=item_id)
    return render(request, 'edit.html', {'item': item})

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 2019-06-12
    • 2016-08-08
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    相关资源
    最近更新 更多