Django调用locate视图出现NoReverseMatch错误求助
解决Django中NoReverseMatch调用'locate'函数的问题
这个NoReverseMatch错误其实很好定位——你的locate URL路由规则明确要求必须传入一个incubator_id参数(从路由['locate/(?P<incubator_id>\d+)/$']就能看出来,它需要一个数字类型的孵化器ID),但你在生成反向URL的时候完全没传这个参数,所以Django找不到对应的匹配路由,就抛出了这个错误。
咱们一步步来解决:
检查反向URL的调用方式
不管你是在模板里用{% url %}标签,还是在视图/代码里用reverse()函数,都必须把incubator_id传进去:- 模板场景:别再写光秃秃的
{% url 'locate' %}了,改成{% url 'locate' incubator_id=incubator.id %}(如果当前上下文有incubator对象),或者直接传具体ID值比如{% url 'locate' 1 %} - 视图/代码场景:要用关键字参数
reverse('locate', kwargs={'incubator_id': 你的孵化器ID变量}),或者位置参数reverse('locate', args=(你的孵化器ID变量,))——注意位置参数的逗号不能丢,不然会被当成单个值而不是元组。
- 模板场景:别再写光秃秃的
确认URL路由的名称正确性
打开你的urls.py,确保这个路由的name属性确实是'locate',比如:url(r'^locate/(?P<incubator_id>\d+)/$', views.locate, name='locate'),这里的名称必须和你反向调用时用的完全一致,大小写、拼写都不能错,哪怕多一个空格都会导致匹配失败。
验证传递的参数类型
路由里的(?P<incubator_id>\d+)只匹配数字,所以你传递的incubator_id必须是整数类型。如果不小心传了字符串或者其他非数字类型,也会触发这个错误,记得检查一下参数的类型是否正确。
举个最常见的错误例子:如果你在模板里写了{% url 'locate' %},完全没传参数,这就刚好踩中了这个坑——因为路由明确要求要有一个ID参数,你没给,Django自然找不到对应的路由啦。
内容的提问来源于stack exchange,提问作者Arjun Kashyap
相关产品推荐
相关产品推荐

