如何重定向?映射? django的网址

时间:2018-04-03 06:42:22

标签: python django django-rest-framework

我有投票应用

以下是我的根网址

urlpatterns = [
    path('poll/', include('myproject.poll.urls')),
]

我有app url

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

urlpatterns = [
    path('', include(router.urls))
]

我使用了ViewSet,因此我可以使用reverse('poll-list')reverse('poll-detail') ...

我可以访问xxx.xxx.xxx.xxx/pollxxx.xxx.xxx.xxx/poll/1/ ....

但是当我访问xxx.xxx.xxx.xxx/api/v1/poll/xxx.xxx.xxx.xxx/poll

时,我想重定向(映射?)网址

我不想更改现有的网址。

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

我该怎么做?什么是最好的方式?

1 个答案:

答案 0 :(得分:4)

您可以通过两种方式实现:

在根网址中添加地图网址并保持应用网址完好无损:

root url看起来像:

urlpatterns = [
    path('poll/', include('myproject.poll.urls')),
    path('api/v1/poll/', include('myproject.poll.urls')),
]

这不会重定向,但您的API(应用网址)将来自两个网址

添加RedirectView

from django.views.generic.base import RedirectView

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

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