部署Django博客出现NoReverseMatch错误,本地运行正常求助
部署Django博客时出现NoReverseMatch错误排查
错误现象
部署Django博客项目时,访问/post/5/触发NoReverseMatch错误,提示找不到post_delete的视图函数或路由名称,但本地环境运行完全正常。此前新增功能时也曾出现该错误,之后自行恢复。
错误详情
NoReverseMatch at /post/5/
Reverse for 'post_delete' not found. 'post_delete' is not a valid view function or pattern name.
相关代码
博客应用(blog)的urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.postList, name='post_list'), path('post/new/', views.postNew, name='post_new'), path('post/<int:pk>/', views.postDetail, name='post_detail'), path('post/edit/<int:pk>/', views.postEdit, name='post_edit'), path('post/delete/<int:pk>/', views.postDelete, name='post_delete'), ]
博客应用(blog)的views.py(postDelete函数)
def postDelete(request, pk): post = get_object_or_404(Post, pk=pk) post.delete() return redirect("post_list")
出错模板post_detail.html相关代码
<aside style="float: left;"> <a class="btn btn secondary" href="{% url 'post_delete' pk=post.pk %}"> {% include './icons/lock-fill.svg' %} </a> </aside>
项目根urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('',include('blog.urls')), ]
排查建议
- 确认部署环境代码同步:本地已添加
post_delete路由,但部署环境可能未同步最新代码。可执行cat blog/urls.py查看部署环境的路由配置是否完整。 - 清除Django缓存:Django会缓存URL配置,代码更新后缓存可能未刷新。执行命令清除缓存:
若使用Redis、Memcached等外部缓存服务,需同时清除对应缓存数据。python manage.py clearcache - 重启部署服务:使用uWSGI、Gunicorn等服务时,代码更新后必须重启服务才能加载新的路由配置,否则会沿用旧的URL规则。
- 检查视图函数完整性:确认部署环境的
views.py中postDelete函数存在,且函数名拼写(大小写、字符)与路由配置完全一致。 - 排查路由冲突:检查部署环境是否有其他应用的路由与
post_delete命名冲突,或根urls.py是否存在覆盖blog应用路由的规则。
内容的提问来源于stack exchange,提问作者Dark Knight
相关产品推荐
相关产品推荐

