如何重定向?映射?Django 中的网址

fuz*_*zes 2 python django django-rest-framework

我有民意调查应用程序

以下是我的根网址

urlpatterns = [
    path('poll/', include('myproject.poll.urls')),
]
Run Code Online (Sandbox Code Playgroud)

我有应用程序网址

router = DefaultRouter()
router.register(r'', PollViewSet)

urlpatterns = [
    path('', include(router.urls))
]
Run Code Online (Sandbox Code Playgroud)

我使用 ViewSet 所以我可以使用reverse('poll-list')reverse('poll-detail')...

我可以访问xxx.xxx.xxx.xxx/poll并且xxx.xxx.xxx.xxx/poll/1/......

xxx.xxx.xxx.xxx/api/v1/poll/但我想在访问时重定向(映射?)网址xxx.xxx.xxx.xxx/poll

我不想更改现有的网址。

因为我想将多个应用程序的视图捆绑到一个 api url 文件中。

我怎样才能做到这一点?最好的方法是什么?

Gah*_*han 5

您可以通过两种方式完成此操作:

在根 url 中添加映射 url 并保持应用程序 url 不变:

根网址看起来像:

urlpatterns = [
    path('poll/', include('myproject.poll.urls')),
    path('api/v1/poll/', include('myproject.poll.urls')),
]
Run Code Online (Sandbox Code Playgroud)

这不会重定向,但您的 API(应用程序 URL)将从两个 URL 提供服务

添加重定向视图

from django.views.generic.base import RedirectView

urlpatterns = [
    path('poll/', include('myproject.poll.urls')),
    path('api/v1/poll/', RedirectView.as_view(url='/poll/')),
]
Run Code Online (Sandbox Code Playgroud)

这会将所有请求重定向xxx.xxx.xxx.xxx/api/v1/poll/xxx.xxx.xxx.xxx/poll/