Моя ошибка состояла в том, что я вызывал функцию декоратора @ cache_region для вызываемого вида. Я не получил сообщений об ошибках, но не было никакого реального кэширования. Итак, в моем views.py я пытался как:
@cache_region('long_term')
def photos_view(request):
#just an example of a costly call from Google Picasa
gd_client = gdata.photos.service.PhotosService()
photos = gd_client.GetFeed('...')
return {
'photos': photos.entry
}
Нет ошибок и нет кеширования. Также ваш view-callable начнет требовать другой параметр! Но это работает:
#make a separate function and cache it
@cache_region('long_term')
def get_photos():
gd_client = gdata.photos.service.PhotosService()
photos = gd_client.GetFeed('...')
return photos.entry
А потом в представлении, вызываемом просто:
def photos_view(request):
return {
'photos': get_photos()
}
Так же, как это работает для @ cache.cache и т. Д.
Резюме: не пытайтесь кэшировать вызываемые представления .
PS. У меня все еще есть небольшое подозрение, что представление вызываемых объектов может быть кэшировано:)
UPD .: Как позже объясняет hlv, когда вы кэшируете view-callabe, кэш фактически никогда не срабатывает, потому что @ cache_region использует параметр запроса параметра callable в качестве идентификатора кэша. И запрос уникален для каждого запроса.