DRF SimpleRouter引入后URL模式含^符号引发404的问题
问题原因
- 你在
router.register()的路径参数中写了r"example/",末尾带了斜杠。DRF的SimpleRouter默认会自动为生成的URL添加尾部斜杠,再加上主路由path("app/", ...)里的尾部斜杠,两者叠加导致生成的URL规则出现双斜杠(比如app/ ^example//$),和实际访问的app/example/路径不匹配,因此返回404。 - 另外代码里存在拼写错误:导入的是
ExampleViewset,但注册时写的是ExampleViewSet(大小写不一致),这会导致运行报错,需要同步修正。
解决方法
- 修正子应用路由的注册路径:去掉
router.register()路径参数末尾的斜杠,同时修正视图类的拼写:
# project/app/urls.py from rest_framework.routers import SimpleRouter from .viewsets import ExampleViewset, TopViewset router = SimpleRouter() # 移除路径末尾斜杠,修正视图类名称大小写 router.register(r"example", ExampleViewset, basename="example")
- 主路由配置保持不变:主
urls.py里的path("app/", include(app_router.urls))无需修改,SimpleRouter会自动为生成的URL添加尾部斜杠,最终生成正确的app/example/和app/example/<pk>/路径规则。
修改完成后,访问localhost:8000/app/example/就能正常匹配到对应的视图集接口了。
内容的提问来源于stack exchange,提问作者Matija Sirk
相关产品推荐
相关产品推荐

