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

Django出现NoReverseMatch错误,topping路由反向匹配失败如何解决?

问题根源

错误出在pizzas.html模板的链接参数传递错误,还有几个配套的小问题需要一起修正:

  • 你在模板里遍历的是pizzas查询集,每个迭代变量是pizza(披萨对象),但你调用pizzas:topping路由时传了不存在的toppings.id,变量为空所以匹配不到数字类型的路由参数,触发NoReverseMatch。
  • 你的topping视图逻辑是接收披萨ID,查询对应披萨的所有配料,所以路由参数应该传当前循环的披萨ID:pizza.id。
  • 额外修正:你的Toppings模型的__str__方法缩进错误,写在了Meta类内部,会导致后台显示配料的时候出现异常。

修正步骤

1. 修正pizzas.html模板的链接参数

把<a href="{% url 'pizzas:topping' toppings.id %}">改成如下内容,同时删掉后面重复输出的{{ pizza }}:

<li>
  <a href="{% url 'pizzas:topping' pizza.id %}">{{ pizza }}</a>
</li>

2. 修正Toppings模型的__str__方法缩进

把models.py里的Toppings类的__str__方法移出Meta类,修改后代码如下:

class Toppings(models.Model):
    """A topping for each pizza."""
    pizza = models.ForeignKey(Pizzas, on_delete=models.CASCADE)
    topping = models.TextField()

    class Meta:
        verbose_name_plural = 'toppings'

    # 调整缩进,和Meta类平级,属于Toppings类的方法
    def __str__(self):
        return f"{self.topping}"

3. 可选优化

你当前的topping视图参数叫toppings_id但实际存的是披萨ID,容易混淆,可以改成pizza_id,同步修改应用urls.py的路由参数名即可,避免后续维护出错。

修正后重新启动服务就能正常访问披萨列表,点击对应披萨就能跳转到配料详情页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:01