0

私のウェブサイトでは、サイドバーで最も閲覧されている製品カテゴリを複数のページでユーザーに提示したいと思います。

したがって、それぞれの異なるビューで私は持っています:

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

さまざまなテンプレートで

{% include "list_most_viewed_categories" %}

そしてその1つで:

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

ただし、most_viewed_categoriesの値は、すべてのビューで計算するのではなく、2日ごとに1回だけ計算したいと思います。

ビューをキャッシュできることは知っていますが、これはより可変的なキャッシュです。この変数を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.setcache.get、値を保存して取得する必要があります。

于 2011-12-18T15:55:21.557 に答える