diff options
| -rw-r--r-- | pyramid/config/routes.py | 15 | ||||
| -rw-r--r-- | pyramid/tests/test_url.py | 8 |
2 files changed, 16 insertions, 7 deletions
diff --git a/pyramid/config/routes.py b/pyramid/config/routes.py index f4f9ac888..642c72701 100644 --- a/pyramid/config/routes.py +++ b/pyramid/config/routes.py @@ -394,13 +394,14 @@ class RoutesConfiguratorMixin(object): pattern = parsed.path def external_url_pregenerator(request, elements, kw): - if '_scheme' in kw and parsed.scheme != kw['_scheme']: - scheme = kw['_scheme'] - elif parsed.scheme: - scheme = parsed.scheme - else: - scheme = request.scheme - kw['_app_url'] = '{0}://{1}'.format(scheme, parsed.netloc) + if not '_app_url' in kw: + if '_scheme' in kw and parsed.scheme != kw['_scheme']: + scheme = kw['_scheme'] + elif parsed.scheme: + scheme = parsed.scheme + else: + scheme = request.scheme + kw['_app_url'] = '{0}://{1}'.format(scheme, parsed.netloc) return elements, kw pregenerator = external_url_pregenerator diff --git a/pyramid/tests/test_url.py b/pyramid/tests/test_url.py index c7b8cfca1..197dfb3eb 100644 --- a/pyramid/tests/test_url.py +++ b/pyramid/tests/test_url.py @@ -1062,6 +1062,14 @@ class Test_external_static_url_integration(unittest.TestCase): 'https://acme.org/path/bar') + def test_generate_external_url_with_explicit_app_url(self): + self.config.add_route('acme', 'http://acme.org/path/{foo}') + request = self._makeRequest() + request.registry = self.config.registry + self.assertEqual(request.route_url('acme', foo='bar', _app_url='http://fakeme.com'), + 'http://fakeme.com/path/bar') + + class DummyContext(object): def __init__(self, next=None): self.next = next |
