diff options
author | Magnus Hagander | 2010-01-08 14:08:05 +0000 |
---|---|---|
committer | Magnus Hagander | 2010-01-08 14:08:05 +0000 |
commit | 43ef9ca9a8d6850244c4c1e3a0d3e70af42d10eb (patch) | |
tree | aea285880c7da190ee0348bcd1810bb35f4ba63e /postgresqleu/util/middleware.py | |
parent | a53c7a4ca80a5f8b522120ca8083714960a03a7d (diff) |
Make filters in admin be sticky, according to:
http://code.djangoproject.com/ticket/3777
Diffstat (limited to 'postgresqleu/util/middleware.py')
-rw-r--r-- | postgresqleu/util/middleware.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/postgresqleu/util/middleware.py b/postgresqleu/util/middleware.py new file mode 100644 index 00000000..265520c9 --- /dev/null +++ b/postgresqleu/util/middleware.py @@ -0,0 +1,36 @@ +from django import http + +class FilterPersistMiddleware(object): + def process_request(self, request): + + path = request.path + if path.find('/admin/') != -1: #Dont waste time if we are not in admin + query_string = request.META['QUERY_STRING'] + if not request.META.has_key('HTTP_REFERER'): + return None + + session = request.session + if session.get('redirected', False):#so that we dont loop once redirected + del session['redirected'] + return None + + referrer = request.META['HTTP_REFERER'].split('?')[0] + referrer = referrer[referrer.find('/admin'):len(referrer)] + key = 'key'+path.replace('/','_') + + if path == referrer: #We are in same page as before + if query_string == '': #Filter is empty, delete it + if session.get(key,False): + del session[key] + return None + request.session[key] = query_string + else: #We are are coming from another page, restore filter if available + if session.get(key, False): + query_string=request.session.get(key) + redirect_to = path+'?'+query_string + request.session['redirected'] = True + return http.HttpResponseRedirect(redirect_to) + else: + return None + else: + return None |