2011-12-08 5 views
0

私のウェブサイトでは、最も多く見た商品カテゴリをサイドバーに複数のページで表示したいと考えています。Djangoのグローバル変数/変数キャッシング

ので、私が持っているそれぞれ異なるビューで:

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サーバのどこかにキャッシュし、その期間の後に更新することは可能ですか?どのようにこれを行うに行くだろうか?

は、それはあなたがサイト全体で再利用したい何かした場合、あなたはおそらく、常に最も閲覧カテゴリを含む変数をテンプレートコンテキストを移入するために起こっているのコンテキストプロセッサを作成するために最善を尽くしますあなた

+3

https://docs.djangoproject.com/en/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を使っています。最初の投稿を更新するのを忘れました。返信してくれてありがとう。 –