Я предположил, что вы используете декораторы кеша. Приведенный ниже код представляет собой декоратор, который возвращает представление, оформленное другим декоратором (т. Е. cache_page
), только если пользователь не является администратором. Таким образом, администратор всегда будет получать не оформленную (не кэшированную) страницу, а другие пользователи получат оформленную (возможно, кэшированную) страницу. Работает со всеми возможными декораторами (не только с cache_page
).
def conditional_cache(decorator):
""" Returns decorated view if user is not admin. Un-decorated otherwise """
def _decorator(view):
decorated_view = decorator(view) # This holds the view with cache decorator
def _view(request, *args, **kwargs):
if request.user.is_staff: # If user is staff
return view(request, *args, **kwargs) # view without @cache
else:
return decorated_view(request, *args, **kwargs) # view with @cache
return _view
return _decorator
Чтобы использовать его вместо типичного синтаксиса:
@cache_page(123)
def testview(request):
(...)
использование:
@conditional_cache(decorator=cache_page(123)) # The argument is what you usually do with views, but without the @
def testview(request):
(...)