From bc789adfc5a9f14cc67af0daaa7766ce18c021ea Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 20 2017 15:19:17 +0000 Subject: Adjust the combine_url jinja filter to account for argument list Basically when we had multiple argument with the same name (ie a list) we were moving it into a single element instead of a list, in other words we were going from: ?foo=bar&foo=baz to ?foo=baz thus loosing half of the information. This commit fixes this. --- diff --git a/pagure/ui/filters.py b/pagure/ui/filters.py index dbcb611..5ad6c74 100644 --- a/pagure/ui/filters.py +++ b/pagure/ui/filters.py @@ -568,10 +568,25 @@ def combine_url(url, page, pagetitle, **kwargs): """ url_obj = urlparse.urlparse(url) url = url_obj.geturl().replace(url_obj.query, '').rstrip('?') - query = dict(urlparse.parse_qsl(url_obj.query)) + query = {} + for k, v in urlparse.parse_qsl(url_obj.query): + if k in query: + if isinstance(query[k], list): + query[k].append(v) + else: + query[k] = [query[k], v] + else: + query[k] = v query[pagetitle] = page query.update(kwargs) - return url + '?' + '&'.join(['%s=%s' % (k, query[k]) for k in query]) + args = '' + for key in query: + if isinstance(query[key], list): + for val in query[key]: + args += '&%s=%s' % (key, val) + else: + args += '&%s=%s' % (key, query[key]) + return url + '?' + args[1:] @APP.template_filter('add_or_remove')