You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django访问/category分类路径时出现404页面不存在错误

Django 分类路由404问题排查

两个访问场景的404是不同原因导致的,根urls.py中path('', include ('Blog.urls'))的配置没有路径前缀问题,不属于根路由挂载错误。

访问 /category/ 返回404的直接原因

当前Blog应用配置的分类路由为path("category/<str:cats>/", views.CategoryView, name="category"),该规则强制要求category/后必须携带cats路径参数,没有为不带参数的/category/路径配置匹配规则,自然会返回404。

访问 /category/Django 返回404的常见原因

你配置的分类路由结尾带斜杠,实际合法匹配路径是/category/Django/(末尾必须带斜杠),访问不带尾斜杠的路径返回404,通常是以下几个问题导致的:

  • 路由配置存在重复导入冲突:Blog/urls.py中同时写了from .views import CategoryView和from . import views,两套导入方式同时存在容易出现命名覆盖、循环导入问题,导致视图函数无法被正确路由找到
  • 全局配置关闭了自动补斜杠:Django默认开启APPEND_SLASH=True,会把不带尾斜杠的请求301跳转到带斜杠的对应路径,如果settings.py中手动把该配置改为False,或者MIDDLEWARE中移除了django.middleware.common.CommonMiddleware(自动补斜杠逻辑依赖这个中间件),就不会触发跳转,直接返回404
  • 修改路由配置后没有重启Django开发服务,旧的路由缓存没有更新

注意:Post表中是否存在category为Django的文章不会触发路由层面的404,只会返回空的文章列表,不属于路由匹配问题

修复步骤

  1. 清理Blog/urls.py的重复导入,补充无参数的分类根路径路由,修改后代码如下:
from django.urls import path
from .views import PostListViewHome, CategoryView

urlpatterns = [
    path("", PostListViewHome.as_view(), name="Blog-home"),  
    path("category/", CategoryView, name="category-root", kwargs={'cats': None}),
    path("category/<str:cats>/", CategoryView, name="category"),
]
  1. 调整CategoryView逻辑,兼容无分类参数的访问场景:
from django.shortcuts import render
from .models import Post

def CategoryView(request, cats=None):
    if cats:
        category_posts = Post.objects.filter(category=cats)
    else:
        # 访问/category/时可自定义返回内容,比如返回全部分类文章、分类列表页
        category_posts = Post.objects.all()
    return render(request, 'Blog/category.html', {'cats': cats, 'category_posts': category_posts})
  1. 检查settings.py配置:
    • 确认APPEND_SLASH未被手动设置为False(默认值为True,无特殊需求不用修改)
    • 确认MIDDLEWARE配置列表中保留了django.middleware.common.CommonMiddleware
  2. 重启Django开发服务,优先使用带尾斜杠的地址/category/Django/测试路由匹配情况。

内容的提问来源于stack exchange,提问作者Zak Meshou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:30:05