Make it possible to specify the key order for csv export
Patch by: Sverre Rabbelier
"""Decorator for views that tries getting the page from the cache andpopulates the cache if the page isn't in the cache yet.The cache is keyed by the URL and some data from the headers. Additionallythere is the key prefix that is used to distinguish different cache areasin a multi-site setup. You could use the sites.get_current().domain, forexample, as that is unique across a Django project.Additionally, all headers from the response's Vary header will be taken intoaccount on caching -- just like the middleware does."""try: from functools import wrapsexcept ImportError: from django.utils.functional import wraps # Python 2.3, 2.4 fallback.from django.utils.decorators import decorator_from_middlewarefrom django.utils.cache import patch_cache_control, add_never_cache_headersfrom django.middleware.cache import CacheMiddlewarecache_page = decorator_from_middleware(CacheMiddleware)def cache_control(**kwargs): def _cache_controller(viewfunc): def _cache_controlled(request, *args, **kw): response = viewfunc(request, *args, **kw) patch_cache_control(response, **kwargs) return response return wraps(viewfunc)(_cache_controlled) return _cache_controllerdef never_cache(view_func): """ Decorator that adds headers to a response so that it will never be cached. """ def _wrapped_view_func(request, *args, **kwargs): response = view_func(request, *args, **kwargs) add_never_cache_headers(response) return response return wraps(view_func)(_wrapped_view_func)