# 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