DefaultRouter类没有为python中的所有应用程序创建API根视图

时间:2016-05-06 06:54:56

标签: python django url router

我正在创建一个简单的python API,其中包含两个名为snippetspolls的应用。对于我的API的单一入口点,我使用DefaultRouter类而不是基于函数的常规视图和@api_view装饰器。

Djando Rest Framework Tutorial所述

  

DefaultRouter类自动创建API根视图

我在API根视图中遇到问题。这是我的Snippets' urls.py

router = DefaultRouter()
router.register(r'snippets', views.SnippetViewSet)
router.register(r'users', views.UserViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

这是我的polls' urls.py

router = DefaultRouter()
router.register(r'actors', views.ActorViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

我的root urls.py如下

urlpatterns = [
 url(r'^admin/', admin.site.urls),          
 url(r'^', include('snippets.urls')),
 url(r'^', include('polls.urls')),
 url(r'^api-auth/', include('rest_framework.urls',
                           namespace='rest_framework')),
]

现在当我启动服务器并在浏览器中加载应用程序时,它只显示片段的网址作为这样的入口点(民意调查的网址丢失)

enter image description here

如果像这样更改我的根urls.py(首先添加polls.urls然后再添加snippets.urls)

urlpatterns = [
 url(r'^admin/', admin.site.urls),          
 url(r'^', include('polls.urls')),
 url(r'^', include('snippets.urls')),
 url(r'^api-auth/', include('rest_framework.urls',
                       namespace='rest_framework')),
]

现在它显示了民意调查的网址(缺少代码段网址)

enter image description here

但我想要那两个应用程序的网址。我不知道我在这里缺少什么。任何形式的帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

你不应该有相同的正则表达式模式映射到urlpatterns中的不同视图。发生这种情况时,服务器将只使用第一个匹配的模式并路由到第一个匹配的视图。

其他替代方案可能您可以创建默认路由器并在根文件夹中注册两个视图,以便它可以处理两个视图集的api_rootview。

http://www.django-rest-framework.org/api-guide/routers/#defaultrouter

答案 1 :(得分:1)

您的url.py可能如下所示(要创建自定义文档页面)

package.json