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

Django使用router注册路由后访问对应地址返回404错误如何解决?

问题原因与解决方案
  • 最核心的错误是你在router.register的路径前缀末尾添加了$正则结束符。DRF的SimpleRouter/DefaultRouter注册路由时,会自动基于你传入的前缀拼接后续路由规则(比如视图集默认的list、detail路径后缀),手动添加$会直接截断路由匹配逻辑,导致生成的路由规则完全不符合预期,无法匹配你输入的请求地址。
  • 其次如果你的视图集需要使用前缀中的random_url参数,无需额外配置,默认就能从视图方法的self.kwargs中获取到该值。

修复方案

方案1:保留router注册逻辑

修改router注册代码,去掉末尾的$即可:

router.register(r"visual/(?P<random_url>[\w]+)", views.LinkTest, basename="test")

如果不需要DRF自动生成的多动作路由,也可以配置视图集的http_method_names限制允许的请求方法,避免生成多余路由。

方案2:直接配置URL(更适合单接口场景)

如果你的LinkTest视图集只需要对外暴露一个接口,可以不用router注册,直接在urlpatterns中添加正则路由即可,逻辑更直观:

from django.urls import re_path

urlpatterns = [
    # Admin
    path("admin/", admin.site.urls),
    # 直接配置自定义路由
    re_path(r"rest/api/latest/visual/(?P<random_url>[\w]+)/$", views.LinkTest.as_view({'get':'list'}), name="test"),
    # 其他Model API Routes
    path("rest/api/latest/", include(router.urls))
]

验证方式

修改后可以运行python manage.py show_urls(需安装django-extensions插件)查看实际生成的路由规则,确认和你预期的访问路径匹配即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:45:01