django - 如果未通过 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 传递错误?或者还有其他选择吗?
感谢您阅读本文
解决方案
我正在尝试创建该功能,以便如果用户不填写表单,他们将返回到带有错误消息的 url。
这是使用 Django 的主要原因之一,因此此时您不应尝试重新实现轮子。
为您的模型使用 Django 的通用视图,它们将按照惯例设置表单验证和重定向,就像您在请求中描述的那样。
https://docs.djangoproject.com/en/2.2/ref/class-based-views/generic-editing/
为您节省大量代码、测试和问题。
推荐阅读
- javascript - 我需要有关登录方法的帮助
- javascript - HTML + java中的表单控件
- c++ - 模板类没有命名类型错误,头的定义和声明分离
- c# - 无法在当前进程令牌中启用权限
- microsoft-graph-api - 使用逻辑应用中的 MS Graph 重置 Azure B2C 密码
- grafana - Grafana:更改现有 api key 的角色
- react-native - 为什么我的 RN 视频组件的 onLoad 事件没有触发?
- c - items[(int)(type - '1')] 在这个 printf 语句中是什么意思?
- asp.net - 为什么有些 cookie 的名称旁边有“文件系统”?
- python - Python/Jupyter Notebook 打印命令确实会破坏程序