Django模板反向解析URL报NoReverseMatch异常求助
问题根因
NoReverseMatch报错是路由配置与反向解析传参不匹配导致的,另有一处模板变量笔误会导致页面内容渲染异常:
- 你在
urls.py中声明的edit路由未配置任何路径参数占位符,但模板中反向解析edit路由时传入了title参数,同时edit视图本身需要接收title入参,路由层没有对应的参数匹配规则,反向解析无法生成合法URL。 entry视图向模板传递的内容变量名为content,但entry.html中渲染条目内容时使用的变量是entry,变量名不匹配会导致条目内容无法正常展示。
修复步骤
1. 调整edit路由规则,补充参数占位符
修改urls.py中的edit路由配置,增加title路径参数,和视图入参、反向解析传参对应:
urlpatterns = [ path("", views.index, name="index"), path("wiki/<str:name>", views.entry, name='entry'), path("search", views.search, name='search'), path("newpage", views.create, name='create'), path("random", views.random, name='random'), # 新增title路径参数,匹配视图入参 path("edit/<str:title>", views.edit, name='edit') ]
如果你希望用查询参数传递title(即地址为
/edit?title=xxx的形式),则不需要修改路由,只需要把模板中的反向解析写法改为<a href="{% url 'edit' %}?title={{ title }}" class="badge badge-info">Edit This Page</a>,同时修改edit视图,从request.GET.get('title')获取条目名即可。这种写法不符合当前项目的路由风格,更推荐使用路径参数方案。
2. 修正模板变量笔误
修改entry.html中的内容渲染变量名,和视图传递的变量名保持一致:
{% extends 'encyclopedia/layout.html' %} {% block title %} {{title}} {% endblock %} {% block body %} <a href="{% url 'edit' title %}" class="badge badge-info">Edit This Page</a> {{ content | safe }} {% endblock %}
修改完成后重启Django服务,编辑链接即可正常反向解析生成地址,条目内容也能正常渲染。
内容的提问来源于stack exchange,提问作者rupesh_ghimire7
相关产品推荐
相关产品推荐

