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

Django访问api/v1/latest-products返回404错误排查求助

问题根因

你遇到的404错误完全由路由配置不匹配导致,核心问题如下:

  1. 你当前把latest-products/路由直接写在了根urls.py的顶层,没有嵌套api/v1/前缀,所以该路由的实际可访问路径是/latest-products/,和你请求的/api/v1/latest-products路径不匹配
  2. Django路由匹配严格遵循顺序规则,你当前根路由的配置下,api/v1/前缀下的子路由没有包含latest-products的规则,自然匹配失败

修复方案

推荐选择第二种更符合Django应用拆分规范的方案:

方案1:直接修改根路由前缀

把根urls.py里的路由规则修改为带api/v1/前缀即可:

# 根urls.py
urlpatterns = [
    # 把原来的latest-products路由替换成下面这行
    path('api/v1/latest-products/', views.LatestProductsList.as_view()),
    path('api/v1/', include('djoser.urls')),
    path('api/v1/', include('djoser.urls.authtoken')),
    path('api/v1/', include('product.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

方案2:路由归到product应用下(推荐)

  1. 先删掉根urls.py里顶层的path('latest-products/', views.LatestProductsList.as_view()),这行代码
  2. 在product应用目录下新建urls.py文件,写入以下内容:
# product/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('latest-products/', views.LatestProductsList.as_view()),
]

因为你已经在根urls.py中配置了path('api/v1/', include('product.urls')),会自动给product应用下的所有路由拼接/api/v1/前缀,最终可访问路径就是你需要的/api/v1/latest-products/

额外注意项

  • Django默认开启APPEND_SLASH配置,请求路径不带尾部斜杠时会自动301重定向到带斜杠的路径,如果你手动关闭了该配置,需要确保请求路径和路由规则的斜杠完全一致
  • 检查views.py中get方法下的代码缩进,你贴出的代码中products = Product.objects.all()[0:4]这行缩进和def get同级,属于语法错误,缩进调整为比def get多4个空格即可
  • 路由配置修改后需要重启Django开发服务才会生效

内容的提问来源于stack exchange,提问作者Francisco Azocar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:45:08