Django出现Reverse for 'topic'反向路由匹配错误如何解决
报错原因
你的路由配置urls.py和视图函数views.py逻辑本身没有问题,报错根源在topics.html模板的变量引用错误:
- 你在模板中写的循环是
{% for topic in topics %},循环内单个主题对象的变量名是topic - 但反向生成链接时你传入的参数是
topics.id:topics是视图传递的整个主题查询集(集合对象),本身不存在id属性,Django模板解析该属性时会拿到空值,相当于给要求传入数字类型topic_id的路由传了空字符串,最终触发反向解析匹配失败的报错。
修复方案
只需要修改topics.html中url标签的传入参数,把集合对象topics改成循环内的单个主题实例topic即可。
修正后的对应模板代码段:
{% extends "learning_logs/base.html" %} {% block content %} <p>Topics</p> <ul> {% for topic in topics %} <li> <a href = "{% url 'topic' topic.id %}">{{ topic }}</a> </li> {% empty %} <li>No topics have been added yet.</li> {% endfor %} </ul> {% endblock content %}
修改完成后刷新页面,每个主题链接会自动拼接对应主题的数字ID(格式为/topics/数字ID/),和路由规则完全匹配,报错就会消失。
内容的提问来源于stack exchange,提问作者szhang04
相关产品推荐
相关产品推荐

