cache_page decorator doesn't work on callable classes
|Reported by:||Russell Keith-Magee||Owned by:||nobody|
|Component:||Core (Cache system)||Version:||1.2-beta|
|Cc:||Brian Neal||Triage Stage:||Accepted|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Description (last modified by )
The cache_page() decorator works fine on views, but fails if you use it on a callable class::
class MyView(object): def __call__(self, request): return HttpResponse()
If you try to wrap this view in urls.py (
cache_page(MyView(), 60) ), you get an error saying "MyView doesn't have attribute __name__". cache_page uses the __name__ attribute to build a cache key, but classes dont have a __name__ attribute. cache_page should also check for __class__.__name__ (or some similar key with a per-instance feature) to allow for wrapping callable classes.
This is a problem for 1.2, because feed views have been moved to a class-based structure, so it is no longer possible to cache feed views using cache_page().