Django模板调用exercise_update路由报NoReverseMatch无参数错误
问题排查方案
- 优先检查当前渲染的模板所有位置,除你贴出的代码行外,是否还有其他地方调用了
{% url 'sessions:exercise_update' %}且没有传入参数。报错明确提示存在无参调用的情况,大概率是遗漏的其他调用导致的问题,而非你贴出的这行代码出错。 - 检查
MyExerciseUpdate视图是否配置了context_object_name = 'exercise':通用UpdateView默认传入模板的上下文变量名为object,如果你没有手动指定context_object_name,模板中的exercise变量实际不存在。如果模板内有{% if exercise %}这类分支判断,未满足条件时执行了无参的url调用,就会触发报错。你可以在模板对应位置临时添加{{ exercise }} {{ exercise.id }}打印变量值,确认变量是否存在有效值。 - 校验urls.py的视图映射逻辑:你局部贴出的路由关联的是
MyExerciseUpdate.as_view(),但完整urls文件中导入和使用的是ExerciseUpdate,如果两个类不是同一个,请确认实际使用的视图类配置正确,没有上下文传递异常的问题。 - 清理模板缓存后重启服务测试:如果开启了模板缓存,旧的错误模板代码可能被持续加载,清理缓存后重试可排除该类问题。
- 检查视图的
get_success_url逻辑:如果你重写了MyExerciseUpdate的get_success_url方法,确认反向解析exercise_update时是否传入了pk参数,表单提交成功后的跳转逻辑如果存在无参反向解析,也会触发该报错。
内容的提问来源于stack exchange,提问作者Gero
相关产品推荐
相关产品推荐

