如何为不同的应用程序组合 DjangoRestFramework 路由器

ner*_*doc 4 django django-rest-framework

我使用 Django 2.1 和 DRF,并计划创建一个包含许多插件应用程序的相当大的应用程序。我希望/apiDRF 有一个 URL 作为端点,但允许每个应用程序在 REST 端点上公开一个特殊模型,例如:

主要是urls.py

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

urlpatterns = [
    # ...
    path('api/', include(router.urls)),
    # ...
]
Run Code Online (Sandbox Code Playgroud)

并在foo_app/urls.py

router = routers.DefaultRouter()
router.register(r'foomodel', FooModelViewSet)
Run Code Online (Sandbox Code Playgroud)

现在,/api/foomodel产生一个404错误。foo_model/urls.py 被导入(在 Django 启动时打印一条打印语句),所有其他的都foo_model.urlpattern[path...]被识别并且工作正常。

如何为中央 api REST 端点定义自定义 api 模型端点?我在文档中没有找到任何内容。

提前致谢。

小智 6

我只是通过扩展路由器注册表来实现这一点。

urls.py

from ad.urls import router as ad_router

main_router = routers.DefaultRouter()
main_router.registry.extend(ad_router.registry)
Run Code Online (Sandbox Code Playgroud)

ad.urls.py

from .api.urls import router as api_router

router = routers.DefaultRouter()
router.registry.extend(api_router.registry)
Run Code Online (Sandbox Code Playgroud)

ad.api.urls.py

router = routers.DefaultRouter()
router.register(r'ad', AdViewSet)
Run Code Online (Sandbox Code Playgroud)