2016-09-08 16 views
0

の最初のtrigeredます、私は非常に単純なDjangoの休憩Frameworkアプリケーションを持って、私はURL http://127.0.0.1:8000/api/activity-list、ルートを実行すると、私のurls.pyは以下のジャンゴDRF:デフォルトのURLは、常に代わりroute.url

router = routers.DefaultRouter() 
router.register(r'activity-list', activities.views.ArticleViewSet) 

urlpatterns = [ 

    url(r'^admin/', admin.site.urls), 

    url(r'^api/', include(router.urls, namespace='api')), 

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

# Base/default URL, when all else fails 
urlpatterns += [ 
    url(r'', TemplateView.as_view(template_name='index.html')), 
] 

のように見えますDRFルーターから届くことはありません。サーバーは常に既定のURLを優先するように見え、index.htmlが常にレンダリングされます。私はデフォルトのURLを変更した場合

はしかし、:だけにして

# Base/default URL, when all else fails 
urlpatterns += [ 
    url(r'BLABLABLA', TemplateView.as_view(template_name='index.html')), 
] 

DRFのルートが到達可能です。これが私の優先課題だと思うのです。 DRFルートは正常に機能しており、常にデフォルトのURLで殴られます。

私のような、運なしで、DRF docsで提案されているバリアントを試してみた:

また、/adminは、私はそれが特にDRFルータに関係していると思われる理由である、正常に動作します。

しかし、同じことが起こり続けます。サーバーのデフォルトルートを維持しながらDRFルートを到達可能にするにはどうすればよいですか?

更新:だから、私は、APIのURLに後続のスラッシュを追加すると動作することが判明しました。これは私にこれら2つの質問(12)につながっています。

答えて

1

最後にわかりました。 DRFのドキュメントによると:デフォルトでは

SimpleRouterによって作成されたURLは 末尾にスラッシュが付加されています。この動作は、ルータをインスタンス化するときにに trailing_slash引数を設定することによって変更できます。 例えば:

router = SimpleRouter(trailing_slash = False)は、ルータの設定としてこれを設定したとr'activity-list'に私のルートを変換し、それは今または末尾のスラッシュなしで動作します。

+1

あなたのURLは '/'の後に '? 'マークなしで動作しますか? –

+0

それを編集しました。 –

0

djangoでurl dispatcherを学ぶ必要があります。デフォルトのURLとDRFルートのURLのpatternは同じで、デフォルトのURLはurlpatternsの上にあり、URLがトリガーされています。

How Django processes a request

+0

どのように上にありますか?私はページの一番下に追加し、それは "urlpatterns"リストの最後のインデックスにあります –

+0

私は与えたリンクを通過しましたか? –

+0

はい、あなたがリンクしたDjangoドキュメントを読んだことがあります。役立たなかった場合は –