我的Django项目“动物”有一个名为“鸟”的应用。在animals / urls.py中,“birds” URI会这样路由到bird / urls.py:

urlpatterns=[
    url(r'^birds/', include('birds.urls')),
    url(r'^b/',     include('birds.urls')), # alias
]

“birds /”是官方的永久基础URI; “b /”被接受为快捷方式/别名。

我如何才能将“b /” URI(永久地)重定向到“birds /”,这样即使用户可以输入“b / penguin”,浏览器的地址栏也将(最终)显示“birds / penguin”?我宁愿不要触摸“鸟”应用程序中的任何代码,因为它不应该知道(关心)项目如何将URI映射到应用程序。

我尝试使用
RedirectView.as_view(pattern_name='birds'))

但这会导致410 Gone响应。和
RedirectView.as_view(url='/birds/'))

将/ b /企鹅重定向到/ birds /,杀死了我的鸟。

最佳答案

您应该尝试这样的事情:

from django.views.generic import RedirectView

urlpatterns=[
    url(r'^birds/', include('birds.urls')),
    url(r'^b/(?P<path>.*)$', RedirectView.as_view(url='/birds/%(path)s')),
]

07-28 03:00