3

Django アプリケーションに Memcache を使用しています。

Django では、開発者はテンプレート フラグメント キャッシュを使用して、テンプレートのセクションのみをキャッシュできます。https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching

views.py でテンプレート フラグメント キャッシュ セクションの値を明示的に変更する方法があるかどうか疑問に思っていました。たとえば、テンプレート フラグメント キャッシュを除いて、cache.set("sidebar", "new value") に似たメソッドを使用できますか?

ご協力ありがとうございました。

4

1 に答える 1

6

理論的には、そうです。最初に、Django で使用されるのと同じパターンでテンプレート キャッシュ キーを作成する必要があります。これは、次のコード スニペットで実行できます。

from django.utils.hashcompat import md5_constructor
from django.utils.http import urlquote

def template_cache_key(fragment_name, *vary_on):
    """Builds a cache key for a template fragment.

    This is shamelessly stolen from Django core.
    """
    base_cache_key = "template.cache.%s" % fragment_name
    args = md5_constructor(u":".join([urlquote(var) for var in vary_on]))
    return "%s.%s" % (base_cache_key, args.hexdigest())

cache.set(template_cache_key(sidebar), 'new content')次に、それを変更するようなことを行うことができます。

ただし、ビューでそれを行うのはちょっと見苦しいです。モデルが変更されたときに、保存後のシグナルを設定し、キャッシュ エントリを期限切れにする方が理にかなっています。

上記のコード スニペットは、Django 1.2 以下で機能します。Django 1.3+ との互換性についてはわかりません。django/templatetags/cache.py最新情報になります。

Django 1.7 では、django/core/cache/utils.pyに使用可能な機能があります。

于 2011-11-11T20:08:58.950 に答える