### Decorator to logout the admin from the regular pages try: from functools import update_wrapper, wraps except ImportError: from django.utils.functional import update_wrapper, wraps # Python 2.4 fallback. from django.http import HttpResponseRedirect from django.utils.decorators import available_attrs from django.utils.http import urlquote def logout_user_and_redirect_on_test(test_func, redirect_url = None ): """ Decorator for views that checks that the user passes the given test, redirecting to the log-in page if necessary. The test should be a callable that takes the user object and returns True if the user passes. """ def decorator(view_func): def _wrapped_view(request, *args, **kwargs): if test_func(request.user): return view_func(request, *args, **kwargs) from django.contrib.auth import logout logout(request) if redirect_url: return HttpResponseRedirect(redirect_url) else : return HttpResponseRedirect(request.path) return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view) return decorator #--------------------------- def logout_admin(user): if user.is_authenticated and (user.is_staff or user.is_superuser): return False else : return True def logout_non_xxxxxx(user): try : if user.is_authenticated and user.xxxx_related.xxxr: return False else : return True except : return False ############# sample view @logout_user_and_redirect_on_test(logout_non_xxxxxx,'/') @logout_user_and_redirect_on_test(logout_admin) def some_view(request): return HttpResponse('Hello World')