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

如何在Django中向URL传递两个捕获值?解决NoReverseMatch报错

解决Django NoReverseMatch错误:动态生成URL时参数为空

看起来你遇到了Django反向解析URL的常见问题,咱们一步步来排查解决:

先抓错误核心

错误提示里的arguments '('', '')'是关键信号——这说明你在模板里调用{% url %}时,传递的brand.slug和category.slug都是空字符串,而你的URL模式要求slug是符合[-a-zA-Z0-9_]+格式的非空值,所以Django找不到匹配的路由。另外还有个容易忽略的细节:你在urls.py里定义的URL名称是job_request_step_two,但模板里写的是form_step_two,这两个名称必须完全一致,否则也会触发反向解析失败!

具体解决步骤

1. 修正URL名称匹配

先把模板里的URL调用名称改对,确保和urls.py里的name参数完全一致:
原来的模板代码:

{% url 'form_step_two' brand.slug category.slug %}

改成:

{% url 'job_request_step_two' brand.slug category.slug %}

2. 确保slug参数非空

接下来要排查为什么brand.slug和category.slug是空的:

  • 检查视图上下文传递:确认渲染模板的视图函数中,已经把brand和category对象正确传入模板上下文了。比如:

    def your_view(request):
        # 示例:根据业务逻辑获取对应的brand和category对象
        brand = Brand.objects.get(slug="your-brand-slug")
        category = Category.objects.get(slug="your-category-slug")
        # 必须把这两个对象放到上下文里,模板才能访问
        return render(request, 'your_template.html', {'brand': brand, 'category': category})
    

    如果没传这两个变量,模板里的brand和category会被视为None,访问它们的slug属性会得到空字符串。

  • 检查数据库记录的slug值:登录Django后台,查看对应的Brand和Category记录,确认它们的slug字段是否有有效值。如果是自动生成slug(比如用slugify),要确保生成逻辑正常工作——比如在模型的save()方法里或者通过信号生成slug。

  • 循环场景下的对象验证:如果是在循环中使用这个URL标签(比如遍历多个品牌/分类),要确认当前循环的对象不是空的,且每个对象的slug字段都有值。比如:

    {% for brand in brand_list %}
        {% for category in brand.categories.all %}
            <!-- 确保brand.slug和category.slug都非空 -->
            {% if brand.slug and category.slug %}
                <a href="{% url 'job_request_step_two' brand.slug category.slug %}">提交工单</a>
            {% endif %}
        {% endfor %}
    {% endfor %}
    

验证修复

完成上面的步骤后,再访问页面:如果URL名称匹配且slug参数都有有效值,反向解析就能正常工作了。你也可以在视图里临时打印slug的值来排查:

print(f"Brand slug: {brand.slug}")
print(f"Category slug: {category.slug}")

确认输出的不是空字符串,就没问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:43:46