2011-12-08 27 views
0

在我的网站中,我想向用户展示侧边栏中多个页面中查看次数最多的产品类别。Django中的全局变量/变量缓存

所以在每个不同的看法,我有:

variables = RequestContext(request, { 
    (...) 
    'most_viewed_cats': calculate_most_viewed_categories() 
} 

,并在各种模板

{% include "list_most_viewed_categories" %} 

,并在那一个:

<ul> 
{% for cat in most_viewed_cats %} 
    {{ cat.name }} 
{% empty %} 
    </ul>No categories to show.<ul> 
{% endfor %} 
</ul> 

不过,我想计算most_viewed_categories值每两天大约一次,而不是在每个视图中计算。

我知道视图可以被缓存,但这更像是一个变量缓存。是否有可能在Django服务器的某个地方缓存这个变量,并且只能在这段时间后才更新它?如何去做这件事?

谢谢

+3

https://docs.djangoproject.com/zh/dev/topics/cache/#the-low-level-cache-api – DrTyrsa

+0

谢谢。我错过了。 –

+0

考虑将这些信息存储在一个表中,以表示会话变量。 – danihp

回答

4

如果它的东西,你想整个网站重用,你可能会做最好的创造,那将永远填充包含观看次数最多的类别变量模板上下文的上下文处理器

from django.core.cache import get_cache 

CACHE_KEY_MOST_VIEWED_CATEGORIES = 'most_viewed_categories' 
cache = get_cache('default') 

def _get_most_viewed_categories(): 
    raise NotImplemented("Haven't figured out how to collect the value and cache it") 

def most_viewed_categories(request): 
    '''Provides the most viewed categories for every template context.''' 

    return { 
     'most_viewed_categories': cache.get(CACHE_KEY_MOST_VIEWED_CATEGORIES, 
              _get_most_viewed_categories) 
    } 

但在任何情况下,在数据库高速缓存的值,则需要获得高速缓存,并使用cache.setcache.get来存储和检索值。

+0

是的。这正是我现在所做的,使用cache.set和cache.get。忘了更新最初的帖子。感谢您的答复。 –