目前看来唯一有效的方法是在urls.py文件中添加装饰器,这样做很不美观。
有没有办法在视图中应用这个装饰器?
class HomeView(View):
@method_decorator(cache_page(60 * 60))
def dispatch(self, *args, **kwargs):
return super(HomeView, self).dispatch(*args, **kwargs)
我尝试了上述方法,但似乎并没有起作用。
method_decorator
来装饰视图的dispatch()
方法,参考文档。最简洁的方式是这样的:from django.utils.decorators import method_decorator
from django.views.generic import ListView
@method_decorator(cache_page(60*60), name='dispatch')
class MyListView(ListView):
# Your view code here.
在urls.py中使用它
url(r'^home_url/?$', cache_page(60*60)(HomeView.as_view())),
method_decorator 方法应该可以很好地解决问题(我们在项目中正在使用它)。您确定这是问题所在吗?
这是我们正在使用的代码(名称已更改)-看起来与您的相似
class MyClassView(CommonMixin, View):
@method_decorator(cache_page(60*60, cache='cache1'))
def get(self, request):
.....
假设我们想要缓存myView视图的结果 -
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def myView(request, year, month):
text = "Displaying articles of : %s/%s"%(year, month)
return HttpResponse(text)
and urls.py将会是:
urlpatterns = patterns('myapp.views',url(r'^articles/(?P<month>\d{2})/(?P<year>\d{4})/', 'myView', name = 'articles'),)