3

匿名ユーザーにdjangoフラグメントキャッシングを使用したいのですが、認証されたユーザーに最新のデータを提供します。これはうまくいくようです:

{% if user.is_anonymous %}

    {% load cache %}
    {% cache 300 "my-cache-fragment" %}
        <b>I have to write this out twice</b>
    {% endcache %}

{% else %}

    <b>I have to write this out twice</b>

{% endif %}

唯一の問題は、キャッシュするhtmlを繰り返さなければならないことです。インクルードに入れる以外に、これを回避する賢い方法はありますか?ありがとう。

4

4 に答える 4

2

認証済みユーザーのキャッシュ タイムアウトをゼロに設定してみてください。

ビュー.py:

context = {
    "cache_timeout": 300 if request.user.is_anonymous() else 0,
}

テンプレート:

{% load cache %}
{% cache cache_timeout "my-cache-fragment" %}
    <b>I have to write this only once</b>
{% endcache %}
于 2011-12-12T08:52:27.973 に答える
1
{% with cache_timeout=user.is_staff|yesno:"0,300" %}
    {% cache cache_timeout cacheidentifier user.is_staff %}
            your content here
    {% endcache %}
{% endwith %}
于 2014-07-01T20:42:47.230 に答える
0

cache次のようにタグに追加のパラメータを渡すことで、キャッシュを指定できます。

{% cache 500 sidebar request.user.is_anonymous %}

詳細については、こちらを確認してください...ただし、これにより、ログインしているユーザーのデータもキャッシュされます...

おそらく、カスタムテンプレートタグを作成する必要があります。まず、既存のタグを調べcacheて、そのコードに基づいてカスタムタグを作成できます。ただし、djangoキャッシングは非常に強力で複雑です(テンプレートキャッシングでさまざまな言語をサポートするなど)。

于 2011-12-12T09:12:57.450 に答える
0

私は問題を理解していない...

{% load cache %}
{% cache 300 "my-cache-fragment" %}
    <b>I have to write this out twice</b>
{% endcache %}

{% if not user.is_anonymous %}
    <b>And this is the extra uncached stuff for authenticated users</b>
{% endif %}
于 2011-04-21T05:44:47.693 に答える