如何在Django中通过URL模式重定向



我有一个基于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/'}),

相关内容

  • 没有找到相关文章

最新更新