Django重定向保留子路径

时间:2020-01-08 01:16:53

标签: python django

在我的urls.py中,我有:

urlpatterns = [
    url(r'^admin/', admin.site.urls, name='admin'),
    url(r'^django-admin/', RedirectView.as_view(url='/admin/', permanent=True)),
]

因此,如果我转到localhost:8000/django-admin/,它会成功将我重定向到localhost:8000/admin/,如果我转到localhost:8000/django-admin/my-app/,它还会将我重定向到localhost:8000/admin/

如何让localhost:8000/django-admin/my-app/转到localhost:8000/admin/my-app/?对于每个可能的子路径也是如此,例如localhost:8000/django-admin/my-app/my-viewlocalhost:8000/django-admin/another-app/等?

1 个答案:

答案 0 :(得分:3)

根据docs这样的方法应该起作用,您可以从路径中捕获组并将其传递给url

给定的URL可能包含字典样式的字符串格式,该格式将根据URL中捕获的参数进行内插。因为总是执行关键字插值操作(即使没有传递任何参数),所以URL中的任何“%”字符都必须写为“ %%”,以便Python将它们转换为输出时的单个百分号。

url(r'^django-admin/(?P<rest>.*)', RedirectView.as_view(url='/admin/%(rest)s', permanent=True)

该网站对于弄清楚内置的基于类的视图如何工作http://ccbv.co.uk/projects/Django/2.2/django.views.generic.base/RedirectView/#get_redirect_url

特别有用