Django类视图实现加购功能时出现Reverse not found报错如何解决?
报错原因
urls.py中定义的section路由强制要求传入subject_id整数参数,Sections视图的post方法执行重定向时未传递该必填参数,Django无法反向解析出符合规则的URL,直接触发报错。- 额外存在的问题:模板中表单的
action属性值为#,请求提交路径不符合预期,无法正确提交到对应视图处理。
解决方案
1. 调整视图post方法的重定向逻辑
重定向时传入必填的subject_id参数,同时可补充加入购物车的业务逻辑,修改后的代码参考:
def post(self, request, subject_id): section_id = request.POST.get('section') # 以下为加购逻辑示例,可根据自身业务调整 target_section = get_object_or_404(Section, pk=section_id) # 示例:如果存在Cart模型,可实现加购逻辑:Cart.objects.get_or_create(user=request.user, section=target_section) print(section_id) # 重定向时传入subject_id参数 return redirect('subjects:section', subject_id=subject_id)
2. 修正模板表单的提交路径
将表单action属性设置为正确的路由地址,传入对应subject_id:
<form action="{% url 'subjects:section' subject_id=section.subject.id %}" method="POST"> {% csrf_token %} <input hidden type="text" name="section" value="{{section.id}}"> <input type="submit" class="btn btn-outline-primary" value="Add To Cart"> </form>
如果希望简化参数传递,可在get视图中将subject对象传入模板:
def get(self, request, subject_id): subject = get_object_or_404(Subject, pk=subject_id) sections = subject.section.all() return render (request, 'sections.html',{"section_list" : sections, "subject": subject })
对应表单action可修改为:
<form action="{% url 'subjects:section' subject_id=subject.id %}" method="POST">
内容的提问来源于stack exchange,提问作者Shreyash mishra
相关产品推荐
相关产品推荐

