2015-09-26 48 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() 
相關問題