2011-11-11 5 views
3

내 장고 응용 프로그램에 Memcache를 사용하고 있습니다.Django에서 템플릿 조각 캐시를 명시 적으로 재설정하는 방법은 무엇입니까?

개발자는 Django에서 템플릿 조각 캐싱을 사용하여 템플릿 섹션 만 캐시 할 수 있습니다. https://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching

명시 적으로 views.py 템플릿 조각 캐시 섹션의 값을 변경하는 방법이 있는지 궁금합니다. 예를 들어, 템플릿 조각 캐시를 제외하고 cache.set ("sidebar", "new value")와 비슷한 방법을 사용할 수 있습니까?

도움 주셔서 감사합니다.

답변

6

이론상으로 그렇습니다. 먼저 this snippet of code 수행 할 수 있습니다 장고에서 사용하는 것과 같은 패턴의 템플릿 캐시 키를 만들어야합니다 :

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') 같은 일을 할 수 있습니다.

그러나 뷰에서이를 수행하는 것은보기 흉합니다. 모델 변경시 post-save signals을 설정하고 캐시 항목을 만료하는 것이 더 적합합니다.

위의 코드 단편은 장고 1.2 이하 버전에서 작동합니다. 장고 1.3+ 호환성에 대해 잘 모르겠습니다. django/templatetags/cache.py에 최신 정보가 표시됩니다.

Django 1.7의 경우 django/core/cache/utils.py에는 사용 가능한 기능이 있습니다.

+0

Django 1.7에서 작동하지 않습니다 ... –

+0

@SimonSteinberger : 예, 약간 수정해야합니다. 여기에서 함수를 복사하거나 사용하십시오 : https://github.com/django/django/blob/master/django/core/cache/utils.py – mipadi

+1

방금 ​​알았습니다. 문서화 된 함수가 있습니다 : https ://docs.djangoproject.com/ko/dev/topics/cache/#django.core.cache.utils.make_template_fragment_key –

관련 문제