2017-03-22 7 views
0

メインのurls.pyファイルにURLの接頭辞をアプリ名で保存します。このようにして、同じプロジェクトの下にある他のアプリでのエンドポイントの衝突を回避します。例えば、私は以下の内容を含むaccounts.urlsDjango RESTのURLがパターンと一致しません

# project/urls.py 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^api/v1/accounts/', include('account.urls')), 
    url(r'^api/v1/users/', include('users.urls')), 
    url(r'^api/v1/transactions/', include('transactions.urls')), 
    url(r'^auth-token-auth', views.obtain_auth_token), 
] 

urlpatterns = [ 
    url(r'^', AccountListView.as_view()), 
    url(r'^(?P<pk>[0-9]+)/$', AccountDetailView.as_view()), 
] 

このようにすることで/api/v1/accounts/1パターンがAccountDetailViewと一致していません。それは常に最初のビューを返しますAccountListView

私がurlpatternsの定義を以下の方法で変更すると、最も興味深いことがあります。すべてのエンドポイントが期待通りに機能します。

# project/urls.py 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^api/v1/', include('account.urls')), 
    url(r'^api/v1/', include('users.urls')), 
    url(r'^api/v1/', include('transactions.urls')), 
    url(r'^auth-token-auth', views.obtain_auth_token), 
] 

# account/urls.py 
urlpatterns = [ 
    url(r'^accounts/$', AccountListView.as_view()), 
    url(r'^accounts/(?P<pk>[0-9]+)/$', AccountDetailView.as_view()), 
] 

質問がメインurls.py.にapi/v1/[app_name]アプリ名を保つことによって、この問題を解決する方法でありますおそらく、URLマッピングのための他のパタ​​ーン(ベストプラクティス)を提案することができます。

答えて

1

URLの2番目のバージョンでは、アカウントリストパターンは正しく終了しますが、最初のパターンは正しくありません。

url(r'^$', AccountListView.as_view()), 
+0

はい、正しくあります:) – emvein

関連する問題