跟随《Python Crash Course》学Django遇NoReverseMatch错误求助
Django NoReverseMatch 错误排查解决
错误原因
触发NoReverseMatch的核心问题是视图函数传递给模板的上下文变量名与模板中引用的变量名不匹配,导致模板无法获取有效的topic.id参数。
在views.py的topic函数中,你将查询到的Topic对象存入了名为topics的上下文键中,但模板topic.html里引用的是topic变量:
def topic(request, topic_id): #show single topic and detail topic = Topic.objects.get(id=topic_id) entries = topic.entry_set.order_by('-date_added') context = {'topics':topic, 'entries':entries} # 错误:键名是topics,模板用的是topic return render(request, 'learning_logs/topic.html', context)
当模板执行{% url 'learning_logs:new_entry' topic.id %}时,topic变量不存在,topic.id会被解析为空字符串,而new_entry的URL规则要求传入整数类型的topic_id,因此触发反向解析失败的错误。
修复步骤
修改views.py中topic函数的上下文字典,将键名从topics改为topic:
def topic(request, topic_id): #show single topic and detail topic = Topic.objects.get(id=topic_id) entries = topic.entry_set.order_by('-date_added') context = {'topic': topic, 'entries': entries} # 修正键名 return render(request, 'learning_logs/topic.html', context)
验证修改
重启Django开发服务器后,访问/topics/2/页面,点击"Add new entry"链接即可正常跳转到新条目创建页面,错误会被修复。
内容的提问来源于stack exchange,提问作者Toby
相关产品推荐
相关产品推荐

