如何修复Django访问post_detail页面时的NoReverseMatch错误?
解决Django中NoReverseMatch找不到'post_remove'的问题
嘿,我刚看完你的问题,这个NoReverseMatch错误其实挺常见的,核心就是Django在反向解析URL的时候找不到名为post_remove的视图配置。咱们一步步来排查和解决:
首先,最可能的原因:项目根URL没包含blog的路由
你有没有检查过项目根目录下的urls.py?如果它没有把blog的URL配置包含进来,那不管blog里写了多少路由,Django都找不到。
根urls.py应该改成这样:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), # 这行必须有,把blog的路由注册到项目里 ]
其次,统一blog/urls.py的路由写法
你现在的blog/urls.py混用了旧的url()和新的path(),虽然理论上兼容,但有时候会导致解析异常。建议统一用Django 2.0+推荐的path()写法,把所有路由都改成一致的:
修改后的blog/urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.post_list, name='post_list'), path('post/<int:pk>/', views.post_detail, name='post_detail'), path('post/new/', views.post_new, name='post_new'), path('post/<int:pk>/edit/', views.post_edit, name='post_edit'), path('drafts/', views.post_draft_list, name='post_draft_list'), path('post/<int:pk>/publish/', views.post_publish, name='post_publish'), path('post/<int:pk>/remove/', views.post_remove, name='post_remove'), ]
最后,收尾操作
- 保存所有修改的文件
- 重启Django开发服务器(有时候缓存会导致路由不更新)
- 清除浏览器缓存(避免旧的页面缓存影响)
这样操作之后,再访问post_detail页面,应该就能正常找到post_remove的路由了。你的post_detail.html里的{% url 'post_remove' pk=post.pk %}写法是完全正确的,只要路由配置没问题,反向解析就会成功。
内容的提问来源于stack exchange,提问作者stevekwon211
相关产品推荐
相关产品推荐

