2012-03-29 2 views
1

У меня есть сайт на основе Django. Я хотел бы перенаправить URL-адреса с шаблоном servertest в них с тем же URL-адресом, за исключением того, что servertest должен быть заменен сервером-тестом.Как переписать этот URL-адрес в Django?

Так, например, следующие 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-адреса.

ответ

2

Используйте следующее:

('^servertest/(?P<path>.*)$', 'redirect_to', {'url': '/server-test/%(path)s'}), 

Он принимает ноль или более символов после servertest/и помещает их после/server-test /.

+0

Спасибо, что сработал. – TonyM

0

Попробуйте это выражение:

('^servertest/', 'redirect_to', {'url': '/server-test/'}), 

или это одно:
('^ servertest', 'redirect_to', { 'URL': '/ servertest /'}),

2

It's covered in the docs.

The given URL may contain dictionary-style string formatting, which will be interpolated against the parameters captured in the URL. Because keyword interpolation is always done (even if no arguments are passed in), any "%" characters in the URL must be written as "%%" so that Python will convert them to a single percent sign on output.

(Strong курсив мой.)

А потом их примеры:

This example issues a permanent redirect (HTTP status code 301) from /foo/<id>/ to /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'}), 
+0

Перед изменением я получил эту ошибку: «redirect_to() получил несколько значений для ключевого слова« url », поэтому я попробовал ответ от Симеона Виссера, который работал. – TonyM

+0

@TonyM: Да, вы не можете использовать неназванные группы; их нужно назвать. (Я обнаружил, что когда я проверил исходный код, это просто '** kwargs', а не' * args'.) –

+0

Спасибо за разъяснение. – TonyM

Смежные вопросы