From 7a35745c843af59800396966164ae81b9ba78c85 Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Sat, 29 Aug 2009 15:30:12 +0200 Subject: [PATCH] add admin.FilterPersistMiddleware --- middleware/__init__.py | 0 middleware/admin.py | 43 +++++++++++++++++++++++++++++++++++++++++ settings.py | 1 + settings.pyc | Bin 2365 -> 2469 bytes 4 files changed, 44 insertions(+) create mode 100644 middleware/__init__.py create mode 100644 middleware/admin.py diff --git a/middleware/__init__.py b/middleware/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/middleware/admin.py b/middleware/admin.py new file mode 100644 index 0000000..ac39370 --- /dev/null +++ b/middleware/admin.py @@ -0,0 +1,43 @@ +# see http://code.djangoproject.com/ticket/3777 + +from django import http + +class FilterPersistMiddleware(object): + def process_request(self, request): + if request.method != 'GET': + return None + + path = request.path + if path.find('/admin/') != -1: # Dont waste time if we are not in admin + query_string = request.META['QUERY_STRING'] + key = 'key' + path.replace('/','_') + if not request.META.has_key('HTTP_REFERER'): + return None + if query_string: # Don't modify but save new queries + request.session[key] = query_string + 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)] + + 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 diff --git a/settings.py b/settings.py index 031b201..738c638 100644 --- a/settings.py +++ b/settings.py @@ -70,6 +70,7 @@ MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'texts.middleware.admin.FilterPersistMiddleware', ) ROOT_URLCONF = 'texts.urls' diff --git a/settings.pyc b/settings.pyc index 930bc55f84884d7376de8e9fe918f2bad90cf731..1281e7feef82419598450bc63101748c9b390d1d 100644 GIT binary patch delta 226 zcmdlhv{ab=;wN4%9o?A|+4C3`Czh4_C^1CIF{CInM9DLxh%!VeFr+duq;fK(h%q!X zF{CjvL@6?)s4zq+F;s>yq%bg~FfwEV6)Q8ODl=rNFf=nTWU4Zx$TBoDGNi~&wq%rH z0h*&QIg-(YQFU`4;~z#1Jq8AblGKWlV!hnVl$4y*^2DN4y~LE<%sf4}%$$_Zb&GpRLjEpRkU$ZRJEGAl0J8K*>W7yyq%bg~FfwEVxylTw$_$w*49yG-nW_vaG7Qa(3@NgcEg5B4 ufTqb$j$|}pRN36e_=j=xUgiWwM&`+KtjjikXANOy44Lf1X*s!_Qw{(uz#%38