From fa66a101b8c5ff5c129ebfbc5f551b66f2adf9e4 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 14 Oct 2013 17:10:16 +0200 Subject: [PATCH] [ADD] website#url_for() support for keep_query bzr revid: fme@openerp.com-20131014151016-f6xsqxenbs5ph5ey --- addons/website/models/website.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 16d490019ce..83f9e6e6d40 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import fnmatch import functools import simplejson @@ -49,7 +50,7 @@ def auth_method_public(): request.uid = request.session.uid http.auth_methods['public'] = auth_method_public -def url_for(path, lang=None): +def url_for(path, lang=None, keep_query=None): if request: path = urljoin(request.httprequest.path, path) langs = request.context.get('langs') @@ -61,6 +62,16 @@ def url_for(path, lang=None): else: ps.insert(1, lang) path = '/'.join(ps) + if keep_query: + keep = [] + params = werkzeug.url_decode(request.httprequest.query_string) + params_keys = tuple(params.keys()) + for kq in keep_query: + keep += fnmatch.filter(params_keys, kq) + if keep: + params = dict([(k, params[k]) for k in keep]) + path += u'?%s' % werkzeug.urls.url_encode(params) + return path def urlplus(url, params):