Django 2.0出现NoReverseMatch错误:找不到'list'视图或路由名称
解决Django 2.0中的NoReverseMatch错误:Reverse for 'list' not found
这个错误逻辑很清晰——你的模板里在尝试调用website:list这个URL别名,但你的website应用的URL配置里根本没定义这个别名,所以Django找不到对应的视图路径,直接抛出了这个报错。下面是一步步的解决办法:
第一步:给website应用添加带name='list'的URL模式
打开你的website/urls.py,在urlpatterns里添加一个对应列表页面的URL规则,核心是要加上name='list'参数,这样Django才能把website:list和这个路径关联起来。示例代码如下:
# website/urls.py app_name = 'website' urlpatterns = [ re_path(r'^about/$', TemplateView.as_view(template_name='...'), name='about'), # 添加这一行,替换成你实际的视图函数/类和路径规则 re_path(r'^posts/$', views.post_list, name='list'), # 如果用类视图的话,写法类似: # re_path(r'^posts/$', PostListView.as_view(), name='list'), ]
这里的name='list'是关键,必须和模板里{% url 'website:list' %}中的list完全匹配。
第二步:确认命名空间配置正确
看你的根urls.py已经正确包含了website.urls,而且website/urls.py也设置了app_name='website',所以模板里website:list的命名空间写法是没问题的,这一步无需修改,只要确保第一步的URL别名添加完成即可。
第三步:重启服务器测试
添加完URL规则后,重启你的Django开发服务器,刷新页面后,这个NoReverseMatch错误应该就会消失了。
额外提醒
如果你的列表视图需要传递参数(比如分页页码),那模板里的URL也要对应传递参数,示例写法:
{% url 'website:list' page=2 %}
如果不需要参数,那你原来的模板写法就完全没问题。
内容的提问来源于stack exchange,提问作者David Foie Gras
相关产品推荐
相关产品推荐

