2016-09-08 6 views
0

ViewSetエンドポイント(ルータで生成)と古典的エンドポイント(各アプリケーションのurls.pyで定義)を一緒に表示する方法はありますか? ?django restフレームワーク表示apiルートのすべてのアプリケーションのViewSetと古典的なエンドポイント

APP1のurl.py:

router = DefaultRouter() 
router.register(r'^foo', views.FooViewSet) 

urlpatterns = [ 
    url(r'^', include(router.urls)),  
    url('bar/', views.BarListView.as_view(), name='bar-list'), 
    url('baz/', views.BazListView.as_view(), name='baz-list'), 
] 

APP2のurl.py:

router = DefaultRouter() 
router.register(r'^qux', views.QuxFooViewSet) 

urlpatterns = [ 
    url(r'^', include(router.urls)),  
    url('quux/', views.QuuxListView.as_view(), name='quux-list'), 
    url('corge/', views.CorgeListView.as_view(), name='corge-list'), 
] 

グローバルurl.py:

urlpatterns = [ 
    url(r'^', include('app1.urls')), 
    url(r'^', include('app2.urls')), 
] 

API-ルート:

HTTP 200 OK 
    Allow: GET, OPTIONS 
    Content-Type: application/json 
    Vary: Accept 

    { 
    "foo": "http://localhost:8000/foo/", 
    "bar": "http://localhost:8000/bar/" 
    "baz": "http://localhost:8000/baz/" 
    "qux": "http://localhost:8000/qux/" 
    "quux": "http://localhost:8000/quux/" 
    "corge": "http://localhost:8000/corge/" 
}  

これは私が得たい結果です。しかし、現時点では、ルータのURLまたは古典的なURLだけを表示することができますが、両方を表示することはできません。そして、複数のルータを表示しようとすると、最初のものだけが表示されます(djangoのドキュメントで説明されています)。それを行う方法はありますか?

答えて

1

いいえ、APIViewではなく、モデルまたは非モデルのビューセットを引き続き使用できます。

from rest_framework import viewsets 

class BarListView(viewsets.ViewSetMixin, <what you already had>): 
    <your current code> 

とする必要があります。 モデルビューではない場合は、ルータの登録にbase_nameを追加する必要があります。

+0

ありがとうございました!そして私はあなたの提案をこの記事で説明した共有ルータと組み合わせました:http://stackoverflow.com/questions/20825029/registering-api-in-apps – Ben

関連する問題