пространство имен с router.urls в django2 - PullRequest
0 голосов
/ 07 февраля 2019

В 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 во включенном модуле или передать 2-кортежсодержащий вместо этого список шаблонов и имя_приложения "

Я не найду подходящего решения, так как я установил имя_приложения для пространства имен.Как я могу использовать пространство имен на router.urls или его нельзя использовать в версии Django 2?

Попытка добавить имя_приложения, но это не решит мою проблему.

Вот мой код.

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")),
]

курсы.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'), путь ('/ reviews /', views.ListCreateReview.as_view (), name = 'review_list'), путь ('/ reviews /', views.RetrieveUpdateDestroyReview.as_view (), name = 'review_detail'),]

Вот код, который я хочу написать.

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

Я хочу получить доступ к review_detail с пространством имен v2.Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2019

Вы пытаетесь так,

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

Внутри включения вы не можете добавить пространство имен.Следуйте вышеуказанному пути.Если у вас есть какие-либо сомнения, обратитесь к этому https://www.django -rest-framework.org / api-guide / routers /

...