0

在我的网站中,我想在侧边栏中的多个页面中向用户展示查看次数最多的产品类别。

所以在每个不同的视图中我都有:

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>

但是,我想每 2 天左右只计算一次 most_viewed_categories 值,而不是在每个视图中计算它。

我知道可以缓存视图,但这更像是一个变量缓存。是否可以将此变量缓存在 Django 服务器中的某处并仅在该时间段后更新它?怎么做呢?

谢谢

4

1 回答 1

5

如果您想在整个站点中重复使用它,您可能最好创建一个上下文处理器,该处理器将始终使用包含查看次数最多的类别的变量填充模板上下文

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.set以及cache.get存储和检索该值。

于 2011-12-18T15:55:21.557 回答