Django添加context触发NoReverseMatch错误该如何排查解决?
问题原因
你的报错属于Django路由反向解析匹配失败,核心原因有两个:
- 路由定义和视图函数参数不匹配:
viewPhoto视图函数要求传入pk参数,但你在urls.py中定义name="photo"的路由时,没有预留接收pk参数的位置,所以模板中调用{% url 'photo' 照片id %}传递参数时,找不到能匹配的路由规则。 - 你提到加
context就崩溃的逻辑是:没有传context时,模板无法获取到photos列表数据,不会渲染每个照片的跳转链接,也就不会触发路由反向解析逻辑;传入context后模板开始遍历照片列表生成跳转链接,反向解析失败的问题就暴露出来了。
解决方案
修改你的app下urls.py的路由规则即可,推荐使用Django 3.2+更推荐的path写法,修改后完整urlpatterns如下:
from django.urls import path from . import views urlpatterns = [ path('gallery/', views.photogallery, name="gallery"), # 新增int类型pk参数匹配,对应视图的pk入参 path('photo/<int:pk>/', views.viewPhoto, name="photo"), path('add/', views.addPhoto, name="add"), ]
如果你坚持使用url(本质是正则匹配的re_path)写法,修改photo路由为如下格式即可:
url(r'^photo/(?P<pk>\d+)/$', views.viewPhoto, name="photo")
修改后重启服务即可正常访问。
内容的提问来源于stack exchange,提问作者ScrillaGorilla
相关产品推荐
相关产品推荐

