6

익명 사용자를위한 캐싱 페이지는 어떻게 만들지 만 Django 1.6의 인증 된 사용자를 위해 렌더링 할 수 있습니까? 이전에는 완벽하게 들리는 CACHE_MIDDLEWARE_ANONYMOUS_ONLY 플래그가 사용되었지만 제거되었습니다.django의 익명 사용자를위한 캐싱

모든 페이지에는 로그인 한 사용자의 이름과 프로필 링크가 표시되는 메뉴 막대가 있기 때문에 묻습니다.

은 무엇입니까? 올바른 방법은 무엇입니까? 공통적 인 문제 여야하지만 Django 문서를 살펴 보았을 때 올바른 방법을 찾지 못했습니다.

답변

2


{%의 endcache의 %} :

{% with cache_timeout=user.is_staff|yesno:"0,300" %} 
    {% cache cache_timeout cacheidentifier user.is_staff %} 
     your content here 
    {% endcache %} 
{% endwith %} 
0

이것이 올바른 방법인지 확실하지 않지만 {% cache %} 템플릿 태그를 사용하여이 문제를 해결하고 있습니다. 템플릿의 동적 사용자 이름 비트 내 기본 템플릿에 있고 나는 아래 나머지 캐시 :에 '키 이름'그런 다음 캐시 경우를 취소 뷰에서 아래의 사용을 지정하여

{% extends "base.html" %} 
{% load cache %} 

{% block content %} 
{% cache 86400 key-name %} 
<h1>My Template in here</h1> 
{% endcache %} 
{% endblock content %} 

key = django.core.cache.utils.make_template_fragment_key('key-name') 
cache.delete(key) 
1

컨텍스트 = 수동으로 새로 고쳐야 { "cache_timeout을": 300 (request.user.is_anonymous 경우) 다른 0}

{% 부하 캐시 %}
{% 캐시 cache_timeout "내을 -cache-fragment "%}
,내가 한 번만 작성해야이 뷰에서 코드가 필요하지 않습니다

-1

당신은 장식을 만들어 다음과 같은 방법을 사용할 수 있습니다 : 하여 URL에 다음

def cache_for_anonim(timeout): 
    def decorator(view_func): 
     @wraps(view_func, assigned=available_attrs(view_func)) 
     def _wrapped_view(request, *args, **kwargs): 

      if request.user.is_authenticated(): 
       return (view_func)(request, *args, **kwargs) 
      else: 
       return cache_page(timeout)(view_func)(request, *args, **kwargs) 
     return _wrapped_view 
    return decorator 

:

url(r'^$', cache_for_anonim(3600)(MyView.as_view())), 

출처 : http://codeinpython.blogspot.com/2017/01/caching-for-anonymous-non-authenticated.html

+0

이것은 나를 위해 작동하지 않습니다. – anyavacy