django2中带有router.urls的名称空间

时间:2019-02-07 03:23:03

标签: django-rest-framework django-urls django-2.1

在django2.1.5和DRF 3.9.1中,我试图添加无法使用的router.urls命名空间。

path('api/v2/', include(router.urls, namespace="v2"))

我的终端中的错误是

“在include()中指定一个名称空间,而不提供app_name' django.core.exceptions.ImproperlyConfigured:不支持在include()中指定名称空间而不提供app_name。在随附的模块中设置app_name属性,或传递包含模式列表和app_name的2元组,而不是“

在为命名空间设置app_name时,找不到任何合适的解决方案。如何在router.urls上使用名称空间,或者在Django 2版本中无法使用它?

尝试添加app_name,但不能解决我的问题

这是我的代码。

config.urls.py

from django.urls import path, include
from django.contrib import admin

from rest_framework import routers

from project.courses import views

router = routers.SimpleRouter()
router.register(r'courses', views.CourseViewSet)
router.register(r'reviews', views.ReviewViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls')),
    path('api/v1/courses/', include('project.courses.urls', namespace='courses')),
    path('api/v2/', include(router.urls, namespace="v2")),
]

courses.urls.py

from django.urls import path
from . import views

app_name = 'project.courses'
urlpatterns = [
    path('', views.ListCreateCourse.as_view(), name='course_list'),
    path('<int:pk>', views.RetrieveUpdateDestroyCourse.as_view(), 

name ='course_detail'),         path('/ reviews /',views.ListCreateReview.as_view(),name ='review_list'),         path('/ reviews /',views.RetrieveUpdateDestroyReview.as_view(),name ='review_detail'),     ]

这是我要编写的代码。

reviews = serializers.HyperlinkedRelatedField(
    many=True, 
    read_only=True,
    view_name='v2:review-detail'
    )

我想使用命名空间v2访问review_detail。 谢谢。

1 个答案:

答案 0 :(得分:5)

您可以这样尝试

urlpatterns = [
    url(r'^api/', include((router.urls, 'app_name'), namespace='instance_name')),
]

在包含内容中,您无法添加名称空间。按照上面的方法。如有疑问,请参阅此https://www.django-rest-framework.org/api-guide/routers/

相关问题