【问题标题】:ValueError: Didn't return an HttpResponse object. It returned None insteadValueError:没有返回 HttpResponse 对象。它返回 None 而不是
【发布时间】:2019-06-12 12:48:27
【问题描述】:

我想编辑帖子时遇到问题。当我按下编辑时 - 我有这个问题:

ValueError at /post/19/edit/
The view blog.views.post_edit didn't return an HttpResponse object. It returned None instead.

urls.py:

url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),

views.py:

def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
    form = PostForm(request.POST, request.FILES, instance=post)
    if form.is_valid():
        post = form.save(commit=False)
        post.author = request.user
        post.published_date = timezone.now()
        post.save()
        return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm(instance=post)
        return render(request, 'blog/post_edit.html', {'form':form})

post_edit.html:

{% block content %}
<h1>Edit Post</h1>
<form method="post" class="post-form" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}

【问题讨论】:

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


    【解决方案1】:

    您的缩进在几个地方是错误的。如果请求不是 POST,则需要实例化空白表单;你需要在任何情况下返回。所以:

    def post_edit(request, pk):
        post = get_object_or_404(Post, pk=pk)
        if request.method == "POST":
            form = PostForm(request.POST, request.FILES, instance=post)
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.published_date = timezone.now()
                post.save()
                return redirect('post_detail', pk=post.pk)
         else:
            form = PostForm(instance=post)
         return render(request, 'blog/post_edit.html', {'form':form})
    

    注意else 与第一个if 是如何对齐的,并且返回值在两者之外。

    【讨论】:

      【解决方案2】:

      您的request.method 不是POST。做吧:

      def post_edit(request, pk):
          post = get_object_or_404(Post, pk=pk)
          if request.method == "POST":
              if form.is_valid():
              ....
              else:
              .....
          # return a response in cases when request.method is not POST
          return HttpResponse()
      

      【讨论】:

      • 为什么?假设他在他的if form.is_valid(): 中返回了一个响应并且它是else,他唯一缺少的就是在他的if request.method =="POST" 之外返回一个响应。 return HttpResponse() 只是个伪命题。
      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 2021-03-12
      • 2019-10-13
      • 2020-08-09
      • 2021-12-10
      • 2016-08-08
      • 2020-06-26
      • 1970-01-01
      相关资源
      最近更新 更多