2015-09-26 62 views
3

我在Django中呈现渲染速度非常慢的视图。我想呈现这个视图并以编程方式缓存它,但还没有想出如何这样做。有什么简单的方法来简单地调用我的StatusView并获得标记为一个字符串,所以我可以缓存它?如何在Django中以编程方式渲染和缓存视图?

这是我的看法与缓存装饰:

class StatusView(ListView): 
    template_name = 'network/list.htm' 
    context_object_name = 'network' 

    def get_queryset(self): 
     return Network.objects.filter(date__lte=date.today()).order_by('-id') 

    def get_context_data(self, **kwargs): 
     context = super(StatusView, self).get_context_data(**kwargs) 
     ... 
     ... 
     return context 

    @method_decorator(cache_page(60 * 1)) 
    def dispatch(self, *args, **kwargs): 
     return super(StatusView, self).dispatch(*args, **kwargs) 

一半。我设法以编程方式呈现视图。现在我只需要缓存它。

str(StatusView(request=request).get(request).render())

+0

是不是你用'cache_page'装饰做什么的? –

+0

对不起,我应该更详细。我有一个后台作业,我想定期调用我的视图并缓存呈现的结果。该视图需要很长时间才能在浏览器请求时呈现,并且内容仅在后台作业运行时发生更改,从而以编程方式生成并缓存该内容。 –

回答

0

它花了一点,因为我的Django的技能挖的是生锈的,但我来到这里:

from django.middleware.cache import UpdateCacheMiddleware 
from django.utils.cache import learn_cache_key 
from django.http import HttpRequest 
from network.views import StatusView 

request = HttpRequest() 
request.META['SERVER_NAME'] = '1.0.0.127.in-addr.arpa' # important 
request.META['SERVER_PORT'] = '8000'     # important 
request._cache_update_cache = True 
response = StatusView(request=request).get(request) 
cacher = UpdateCacheMiddleware() 
cacher.process_response(request, response).render() 
相关问题