2016-06-09 76 views
0

在Jinja2之前,我通過memcached使用自定義的context_processor進行緩存(對象列表)。Django - Jinja2緩存模板變量

#context_processors.py  
def pikto_studio_caching(request:None, sender:None, **kwargs): 
     cache_time = 60*60*24 
     cache_key_works = 'pikto_studio:works' 

     works = cache.get(cache_key_works) 

     if request: 
      if not works: 
       works = Work.objects.all() 
       cache.set(cache_key_works, works, cache_time) 
      return {'WORKS':works} 
     else: 
      cache._cache.flush_all() 
      return None 

與jinja2我不能使用context_processors。我該如何解決這個問題?

謝謝。

回答

0

創建jinja2.py文件,將你的緩存函數添加到Jinja2環境變量中。

from django.contrib.staticfiles.storage import staticfiles_storage 
from django.core.urlresolvers import reverse 
from django.template import defaultfilters 
from jinja2 import Environment 


#CACHING 
from django.core.cache import cache 
from django.db.models.signals import post_save 
from apps.web.models import Work, CategoryWork, BasicArticle, CategoryBasicArticle 

def caching(request=None, sender=None, **kwargs): 
    cache_time = 60*60*24 
    cache_key_works = 'pikto_studio:works' 

    works = cache.get(cache_key_works) 

    if request: 
     if not works: 
      works = Work.objects.all() 
      cache.set(cache_key_works, works, cache_time) 
     return {'works':works} 
    else: 
     cache._cache.flush_all() 
     return None 



def environment(**options): 
    env = Environment(**options) 

    env.globals.update({ 
     'static': staticfiles_storage.url, 
     'url': reverse, 
     'caching':caching, 

    }) 
    return env 

呼叫模板功能:

{% set works = caching(request)['works'] %} 
    {% for work in works %} 
    {{ work.title }} 
{% endfor %}