forked from orbit-oss/flask
parent
883cb7cedc
commit
6aee9f6d77
2 changed files with 21 additions and 2 deletions
|
|
@ -300,14 +300,23 @@ def url_for(endpoint, **values):
|
|||
scheme = values.pop('_scheme', None)
|
||||
appctx.app.inject_url_defaults(endpoint, values)
|
||||
|
||||
# This is not the best way to deal with this but currently the
|
||||
# underlying Werkzeug router does not support overriding the scheme on
|
||||
# a per build call basis.
|
||||
old_scheme = None
|
||||
if scheme is not None:
|
||||
if not external:
|
||||
raise ValueError('When specifying _scheme, _external must be True')
|
||||
old_scheme = url_adapter.url_scheme
|
||||
url_adapter.url_scheme = scheme
|
||||
|
||||
try:
|
||||
rv = url_adapter.build(endpoint, values, method=method,
|
||||
force_external=external)
|
||||
try:
|
||||
rv = url_adapter.build(endpoint, values, method=method,
|
||||
force_external=external)
|
||||
finally:
|
||||
if old_scheme is not None:
|
||||
url_adapter.url_scheme = old_scheme
|
||||
except BuildError as error:
|
||||
# We need to inject the values again so that the app callback can
|
||||
# deal with that sort of stuff.
|
||||
|
|
|
|||
|
|
@ -627,6 +627,16 @@ class TestLogging(object):
|
|||
'index',
|
||||
_scheme='https')
|
||||
|
||||
def test_url_for_with_alternating_schemes(self):
|
||||
app = flask.Flask(__name__)
|
||||
@app.route('/')
|
||||
def index():
|
||||
return '42'
|
||||
with app.test_request_context():
|
||||
assert flask.url_for('index', _external=True) == 'http://localhost/'
|
||||
assert flask.url_for('index', _external=True, _scheme='https') == 'https://localhost/'
|
||||
assert flask.url_for('index', _external=True) == 'http://localhost/'
|
||||
|
||||
def test_url_with_method(self):
|
||||
from flask.views import MethodView
|
||||
app = flask.Flask(__name__)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue