Django项目添加CreateView触发PostDetailView 404错误求助
解决Django PostCreateView访问404的问题
这个问题的根源很明确:URL路由的匹配顺序搞反了。
Django在匹配URL时是从上到下依次检查规则的,你把动态slug路由path('<slug:slug>/', ...)放在了new_design/路由的前面。当你访问/score/new_design/时,Django会直接把new_design当作一个slug参数,交给PostDetailView处理——但数据库里根本没有slug为new_design的Post对象,所以触发了404错误。
修正方案:调整路由顺序
把更具体的new_design/路由移到动态slug路由的前面,让Django优先匹配创建视图的规则:
urlpatterns = [ path('', PostListView.as_view(), name='score'), path('new_design/', PostCreateView.as_view(), name='post-create'), # 移到动态路由前 path('<slug:slug>/', PostDetailView.as_view(), name='post-detail'), ]
额外验证小提示
- 确认你的Post模型中存在
slug字段,或者在PostDetailView里明确指定了slug对应的字段(比如用title作为slug来源):class PostDetailView(DetailView): model = Post slug_field = 'title' # 如果slug对应title字段的话 slug_url_kwarg = 'slug' - 模板里的
{% url 'score:post-create' %}标签是正确的,只要你的app名称确实是score就没问题。
调整完路由顺序后,再访问/score/new_design/应该就能正常进入创建视图了。
内容的提问来源于stack exchange,提问作者A_K
相关产品推荐
相关产品推荐

