Python маршруты не работают для нестатических URL - PullRequest
1 голос
/ 08 июля 2011

Я пытаюсь написать модульный тест для старого приложения pylons 0.9.7. Проблема, которую мы имеем, заключается в том, что очень легко случайно жестко закодировать URL пути в наших jinja2 шаблонах, которые прекрасно работают, пока кто-то не хостит наше приложение с другим префиксом (т.е. размещает его на http://localhost/foo/ вместо http://localhost/). я делая это с помощью настройки «функционального теста» по умолчанию, которая вставляет создан для меня. Я запрашиваю каждое действие контроллера и передаю SCRIPT_NAME вроде так:

response = self.app.get('/some/url/path', 
                        extra_environ={'SCRIPT_NAME' : '/custom_prefix'})

Затем я использую beautifulsoup для анализа документа, перебирая все теги, которые имеют атрибут href или src, и обеспечивают что он начинается с '/custom_prefix'.

Вот где все становится странным: когда мы проходим абсолютный путь к pylons.url (что на самом деле routes.util.URLGenerator) в наших шаблонах, как это:

{{ h.stylesheet_link(h.url('/css/style.css')) }}

... работает отлично. Тем не менее, когда мы вызываем pylons.url с ключевым словом аргументы как это:

{{ h.link_to('Home', h.url(controller='person', action='home')) }}

... префикс не вставлен. Однако функция url() работает правильно при правильном запуске (т. е. используя mod_wsgi или pastedeploy) с непустым SCRIPT_NAME.

Полагаю, я пропустил важный шаг, но не могу понять, что это такое.

...