#django-rest-framework #router #django-urls
#django-rest-framework #маршрутизатор #django-urls
Вопрос:
Сначала немного кода: serializers.py
class PostSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Post
fields = '__all__'
class CommentSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Comment
fields = '__all__'
В viewsets.py я просто использую model viewset и queryset для всех объектов.
Теперь в моем api.urls маршрутизаторы зарегистрированы следующим образом:
router = routers.DefaultRouter()
router.register('posts', PostViewSet)
router.register('comments', CommentViewSet)
# this is what i want
urlpatterns = [
re_path(r'api/', include(router.urls),
]
urlpatterns = router.urls
Как вы можете видеть, базовый URL-адрес для маршрутизаторов — api/ .
Когда я захожу на localhost:8000/api/comments/, я получаю правильный вывод.
Но затем в списке комментариев для конкретного комментария я получаю
{
"url": "localhost:8000/comments/1/",
"post": "localhost:8000/posts/1/"
}
Обратите внимание на отсутствие базового URL-адреса (api/)..
Вместо этого я ожидаю
{
"url": "localhost:8000/api/comments/1/",
"post": "localhost:8000/api/posts/1/"
}
Кроме того, если я перейду к localhost:8000/api / commnets/1/ или localhost:8000/comments /1/, я получу правильный индивидуальный комментарий.
Мой вопрос сводится к тому, почему api / отсутствует в URL-адресе в браузерном API и как его решить.
Ответ №1:
В моем приложении urls.py,
Я изменил path(‘ ‘, include(‘app_name.api.urls’)) на path(‘api/’, include(‘app_name.api.urls’))
Затем в api.urls изменил re_path (r ‘api/ ‘, include(router.urls)) на path (‘ ‘, include(router.urls))