diff --git a/CHANGES b/CHANGES index ce7289da..c3489d27 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,7 @@ Version 0.2 - :meth:`~flask.Flask.add_url_rule` can now also register a view function. - server listens on 127.0.0.1 by default now to fix issues with chrome. +- added external URL support. Version 0.1 ----------- diff --git a/flask.py b/flask.py index 15891ea1..6614cba0 100644 --- a/flask.py +++ b/flask.py @@ -179,6 +179,7 @@ def url_for(endpoint, **values): :param endpoint: the endpoint of the URL (name of the function) :param values: the variable arguments of the URL rule + :param _external: if set to `True`, an absolute URL is generated. """ ctx = _request_ctx_stack.top if '.' not in endpoint: @@ -187,7 +188,8 @@ def url_for(endpoint, **values): endpoint = mod + '.' + endpoint elif endpoint.startswith('.'): endpoint = endpoint[1:] - return ctx.url_adapter.build(endpoint, values) + external = values.pop('_external', False) + return ctx.url_adapter.build(endpoint, values, force_external=external) def get_template_attribute(template_name, attribute): diff --git a/tests/flask_tests.py b/tests/flask_tests.py index 9a36a8d2..6cddbcbd 100644 --- a/tests/flask_tests.py +++ b/tests/flask_tests.py @@ -227,6 +227,8 @@ class BasicFunctionalityTestCase(unittest.TestCase): pass with app.test_request_context(): assert flask.url_for('hello', name='test x') == '/hello/test%20x' + assert flask.url_for('hello', name='test x', _external=True) \ + == 'http://localhost/hello/test%20x' def test_custom_converters(self): from werkzeug.routing import BaseConverter