【问题标题】:ValueError at /edit/3 The view main_panel.views.edit didn't return an HttpResponse object. It returned None instead/edit/3 处的 ValueError 视图 main_panel.views.edit 未返回 HttpResponse 对象。它返回 None 而不是
【发布时间】:2019-03-10 11:31:20
【问题描述】:

我正在尝试向我的项目添加一个编辑按钮,但出现错误。

以下代码是我的views.py文件。

def edit(request, list_id):
if request.method == 'POST':
    item = List.objects.get(pk=list_id)
    form = ListForm(request.POST or None, instance=item)

    if form.is_valid():
        form.save()
        return redirect('home')
else:
    item = List.objects.get(pk=list_id)
    return render(request, 'main_panel/edit.html', {'item': item})

这是我的edit.html

{% extends 'main_panel/base.html' %}

{% block content %}

 {% if item  %}
<form class="form-inline my-2 my-lg-0" method="POST">
       {% csrf_token %}


    <input type="search" value="{{ item.name }}" name="name">
    <input type="search" value="{{ item.choice_field }}" name="choice_field">
    <input type="search" value="{{ item.product }}" name="product">
    <input type="search" value="{{ item.avans }}" name="avans">
    <input type="search" value="{{ item.total_price }}" name="total_price">
    <input type="search" value="{{ item.status }}" name="status">

    <button type="submit">Kaydet</button>
</form>
{% endif %}
{% endblock %}

这是我的 urls.py

from django.urls import path
from . import views

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

这给了我以下错误:

/edit/3 处的值错误 视图 main_panel.views.edit 没有返回 HttpResponse 对象。 它返回 None 。

当我在编辑数据后单击 提交 按钮时,会出现错误。感谢任何帮助。谢谢。

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您的视图收到一个 POST 请求并且表单无效,则该函数不会执行显式返回语句并返回默认值 None

    我建议你看看这个例子:https://docs.djangoproject.com/en/2.1/topics/forms/#the-view

    看看最后一行如何成为 GET 请求的默认返回语句而不是有效的 POST 请求。

    【讨论】:

      【解决方案2】:

      正如mg所说,如果form.is_valid() 不是true,它不会隐含return 的东西。它会给你留下None

      def edit(request, list_id):
        if request.method == 'POST':
        item = List.objects.get(pk=list_id)
        form = ListForm(request.POST or None, instance=item)
      
        if form.is_valid():
           form.save()
           return redirect('home')
        return redirect('error_page') # or basically any other return maybe HttpResponse
      

      【讨论】:

        猜你喜欢
        • 2020-11-01
        • 2019-06-12
        • 2018-06-02
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 2020-12-03
        相关资源
        最近更新 更多