6

我該如何緩存匿名用戶的頁面,並將其呈現給Django 1.6中的授權用戶?曾經有一個CACHE_MIDDLEWARE_ANONYMOUS_ONLY標誌聽起來很完美,但已被刪除。爲django中的匿名用戶緩存

我在問,因爲每個頁面都有一個菜單欄,顯示登錄用戶的名稱和他/她的個人資料的鏈接。

什麼是正確這樣做的方式?必須是一個常見問題,但我沒有找到通過Django文檔查看的正確方法。

回答

2

這並不需要在視圖中的任何代碼:

{% 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「%}
我寫這一次
{%endcache%}

-1

您可以通過創建一個裝飾用下面的辦法:

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:

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

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

+0

這不適用於我 – anyavacy