From 069d07350ba6edc882f18aaae238701b4e56290b Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 7 Jan 2019 12:41:46 +0100 Subject: [PATCH 1/2] utils: ignore URL parameters with a None value (#29242) --- src/authentic2/utils.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/authentic2/utils.py b/src/authentic2/utils.py index 1ff7e89d..7487d2eb 100644 --- a/src/authentic2/utils.py +++ b/src/authentic2/utils.py @@ -264,6 +264,8 @@ def make_url(to, args=(), kwargs={}, keep_params=False, params=None, append=None If you pass a request you can ask to keep params from it, exclude some of them or include only a subset of them. You can set parameters or append to existing one. + If a parameter value is None, it clears the parameter from the URL, if + the parameter was appended, it's just ignored. ''' if resolve: url = resolve_url(to, *args, **kwargs) @@ -284,13 +286,17 @@ def make_url(to, args=(), kwargs={}, keep_params=False, params=None, append=None url_params.setlist(key, request.GET.getlist(key)) if params: for key, value in params.iteritems(): - if isinstance(value, (tuple, list)): + if value is None: + url_params.pop(key, None) + elif isinstance(value, (tuple, list)): url_params.setlist(key, value) else: url_params[key] = value if append: for key, value in append.iteritems(): - if isinstance(value, (tuple, list)): + if value is None: + continue + elif isinstance(value, (tuple, list)): url_params.extend({key: value}) else: url_params.appendlist(key, value) -- 2.18.0