Django新增add_post页面访问报404错误问题求助
问题根源
404错误由URL路由匹配顺序错误导致。
Django的urlpatterns按从上到下的顺序逐行匹配,命中第一条符合规则的路由就会终止匹配流程,不会执行后续路由。你当前的路由配置中,动态文章详情路由path('<slug:slug>/', PostDetail.as_view(), name='post_detail')写在了add_post/路由的前面,访问/add_post/时,Django会先把add_post识别为文章slug参数传给PostDetail视图,视图找不到slug为add_post的文章记录就会返回404,后续的AddPost路由完全不会被触发。
修复方案
调整urlpatterns内的路由顺序,所有固定路径的路由都要放在宽泛的动态匹配路由前面,修改后的urls.py代码如下:
from .views import AddPost, PostList, PostDetail, PostLike from django.urls import path urlpatterns = [ path('', PostList.as_view(), name='home'), # 固定路径路由前置 path('add_post/', AddPost.as_view(), name='create_post'), path('like/<slug:slug>/', PostLike.as_view(), name='post_like'), # 通配类动态路由放在最后 path('<slug:slug>/', PostDetail.as_view(), name='post_detail'), ]
补充校验项
如果调整顺序后仍无法正常访问,逐一核对以下配置:
- 确认当前app的urls.py已经在项目根路由文件中通过
include()正确注册,根路由需存在类似path('', include('你的blog应用名.urls'))的配置 - 确认
add_post.html模板文件存放在app的templates目录下,或在项目TEMPLATES配置指定的扫描路径内 - 确认访问路径拼写正确,本地开发环境下的正确地址格式为
http://127.0.0.1:8000/add_post/
注意:你使用的CreateView在表单校验通过、文章保存成功后,默认会调用Post模型的
get_absolute_url()方法执行跳转,记得给Post模型补上该方法,否则文章提交成功后会抛出「No URL to redirect to」类的错误。
内容的提问来源于stack exchange,提问作者Jord
相关产品推荐
相关产品推荐

