首页 > 解决方案 > 如果未通过 HttpResponseRedirect 填写表单,则显示用户错误消息

问题描述

我正在尝试创建该功能,以便如果用户不填写表单,他们将返回到带有错误消息的 url。

我的网址

from django.urls import path
from content import views

urlpatterns = [
    path('readerpage/<int:content_id>', views.readerpage, name='readerpage'),
    path('readerpage/<int:content_id>/add_review',
         views.add_review, name='add_review'),
]

我的观点

def add_review(request, content_id):
content = get_object_or_404(Content, pk=content_id)
if request.POST['readability'] and request.POST['readability_rating'] and request.POST['actionability'] and request.POST['actionability_rating'] and request.POST['general_comments']:
    review = Review()
    review.readability = request.POST['readability']
    review.readability_rating = request.POST['readability_rating']
    review.actionability = request.POST['actionability']
    review.actionability_rating = request.POST['actionability_rating']
    review.general_comments = request.POST['general_comments']
    review.avg = (float(review.readability_rating) +
                  float(review.actionability_rating)) / 2
    review.content = content
    review.save()
    return redirect('home')
else:
    return HttpResponseRedirect(reverse('readerpage', args=(content_id,)))

现在用户被返回但没有收到错误消息

我试过返回渲染,而不是 HttpResponseRedirect

return render (request, 'content/readerpage', {'error': 'You need to fill in all information'})

但这会将用户发送到错误的 url,从而产生错误,因为它将 add_review 添加到 to URL

http://127.0.0.1:8000/content/readerpage/41/add_review

有没有办法通过 HttpResponseRedirect 传递错误?或者还有其他选择吗?

感谢您阅读本文

标签: djangodjango-views

解决方案


我正在尝试创建该功能,以便如果用户不填写表单,他们将返回到带有错误消息的 url。

这是使用 Django 的主要原因之一,因此此时您不应尝试重新实现轮子。

为您的模型使用 Django 的通用视图,它们将按照惯例设置表单验证和重定向,就像您在请求中描述的那样。

https://docs.djangoproject.com/en/2.2/ref/class-based-views/generic-editing/

为您节省大量代码、测试和问题。


推荐阅读