You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 14:57:02