summaryrefslogtreecommitdiff
path: root/postgresqleu/util/middleware.py
diff options
context:
space:
mode:
authorMagnus Hagander2010-01-08 14:08:05 +0000
committerMagnus Hagander2010-01-08 14:08:05 +0000
commit43ef9ca9a8d6850244c4c1e3a0d3e70af42d10eb (patch)
treeaea285880c7da190ee0348bcd1810bb35f4ba63e /postgresqleu/util/middleware.py
parenta53c7a4ca80a5f8b522120ca8083714960a03a7d (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.py36
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