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

Django项目order_pdf路由NoReverseMatch反向匹配错误排查

错误成因汇总

  • 模板上下文缺少可匹配的Info实例:你的add_business_plan视图中,传递给模板的上下文里注释掉了Info相关参数,模板渲染时Info.id读取不到有效值,返回空字符串,导致反向路由匹配时空参数不符合路由规则报错。
  • 表单提交后未捕获新创建的实例ID:form.save()会直接返回刚存入数据库的Info模型对象,你当前代码没有接收这个返回值,提交成功后的模态框也无法拿到对应PDF的ID参数。
  • 存在潜在字段不匹配问题:你的Info模型只有name字段,但视图order_pdf、admin_order_pdf中调用了不存在的info.businessName属性,后续生成PDF时会触发额外报错。

修复步骤

1. 修改add_business_plan视图代码

def add_business_plan(request):
    if request.method == 'POST':
        form = infoForm(request.POST)
        if form.is_valid():
            # 接收刚保存的Info实例
            new_info = form.save()
            # 字段名和模型保持一致,替换为name
            business_name = form.cleaned_data.get('name')
            messages.success(request, f'PDF created for {business_name}!')
            # 将新实例传入模板上下文
            return render(request, 'businessplan/businessplan.html', {'successful_submit': True, 'new_info': new_info})

    else:
        form = infoForm()
    # 如果需要展示所有历史记录的下载链接,打开下方查询
    info_list = Info.objects.all()
    return render(request, 'businessplan/businessplan.html', {
        'form': form, 
        'successful_submit': False,
        'info_list': info_list
     })

2. 调整模板路由引用写法

仅提交成功后展示当前记录的下载链接:

{% if successful_submit %}
<a href="{% url 'businessplan:order_pdf' new_info.id %}">下载当前商业计划书PDF</a>
{% endif %}

展示所有历史记录的下载链接:

{% for info in info_list %}
<a href="{% url 'businessplan:order_pdf' info.id %}">下载{{info.name}}的商业计划书PDF</a>
{% endfor %}

删除原有Info.id、obj.id等无效变量写法,变量名和视图传入的上下文参数保持一致。

3. 修复视图字段引用错误

将order_pdf、admin_order_pdf视图中所有info.businessName替换为info.name,和模型字段匹配。

可选优化:路由参数类型限制

将urls.py中<str:info_id>修改为<int:info_id>,和模型ID的数值类型匹配,过滤非法参数请求。


内容的提问来源于stack exchange,提问作者A_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:45:02