我有一个基于Django的网站。我想将模式为servertest
的URL重定向到相同的URL,除了servertest
应该被server-test
取代。
因此,例如,以下URL将被映射为重定向,如下所示:
http://acme.com/servertest/ => http://acme.com/server-test/
http://acme.com/servertest/www.example.com => http://acme.com/server-test/www.example.com
http://acme.com/servertest/www.example.com:8833 => http://acme.com/server-test/www.example.com:8833
我可以在urls.py中使用以下行获得第一个工作示例:
('^servertest/$', 'redirect_to', {'url': '/server-test/'}),
不知道如何为其他人做这件事,所以只替换了URL中最有用的部分。
使用以下内容(针对Django 2.2更新):
re_path(r'^servertest/(?P<path>.*)$', 'redirect_to', {'url': '/server-test/%(path)s'}),
它在servertest/
之后取零个或多个字符,并将它们放在/server-test/
之后。
或者,您可以使用新的path
函数,该函数涵盖了简单情况下的url模式,而不使用regex(在Django的新版本中,它是首选):
path('servertest/<path:path>', 'redirect_to', {'url': '/server-test/%(path)s'}),
文档中有介绍。
给定的URL可能包含字典样式的字符串格式,该格式将根据URL中捕获的参数进行插值。因为关键字插值总是完成(即使没有传入参数),所以URL中的任何"%"字符都必须写成"%%",以便Python将它们转换为单百分比登录输出。
(强调我的。)
然后他们的例子:
此示例从/foo/<id>/至/bar/<id>/:
from django.views.generic.simple import redirect_to urlpatterns = patterns('', ('^foo/(?P<id>d+)/$', redirect_to, {'url': '/bar/%(id)s/'}), )
所以你可以看到,这只是一个很好的直接形式:
('^servertest/(?P<path>.*)$', 'redirect_to', {'url': '/server-test/%(path)s'}),
试试这个表达式:
('^servertest/', 'redirect_to', {'url': '/server-test/'}),
或者这个:
('^servertest','redirect_to',{'url':'/server test/'}),