2011-12-08 31 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。忘了更新最初的帖子。感謝您的答覆。 –