ValueError: Не возвращает объект HttpResponse. Вместо этого он вернулся - PullRequest
0 голосов
/ 18 января 2019

У меня проблема, когда я хочу отредактировать свой пост. Когда я нажимаю изменить - у меня есть эта проблема:

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 %}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Ваш отступ в нескольких местах неверен. Вам необходимо создать пустую форму, если запрос не 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, и возврат находится за пределами обоих.

0 голосов
/ 18 января 2019

Ваш 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()
...