utils: ignore URL parameters with a None value (#29242)

This commit is contained in:
Benjamin Dauvergne 2019-01-07 12:41:46 +01:00
parent 5095f90afc
commit c39e847d36
1 changed files with 8 additions and 2 deletions

View File

@ -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)
@ -285,13 +287,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)