0

私はdjangoプロジェクトでキャッシングにmemcachedを使用していますが、このようなビューがあります

def questions(request):
    # code to fetch all questions

この関数は、データベースから質問のリストを返す以外に何もしませんが、結果をレンダリングするページには、request.user 名を表示するヘッダーがあります。

@cache_pageデコレータを直接使用すると、リクエスト オブジェクトもキャッシュされrequest.user、そのページの もキャッシュからフェッチされます。その結果、質問ページに行くと他の人の名前が表示されます。

デコレータを使用して、リクエスト オブジェクトがキャッシュされないようにする方法はありますか。1 つの方法は、低レベルの API を使用して、キャッシュしたいクエリセットをキャッシュすることですが、リクエスト オブジェクトに関連するものを何もキャッシュしないデコレーターを作成することは可能ですか?

私の質問が明確であることを願っています。

4

1 に答える 1

3

ページのテンプレートを変更することを考えて、ユーザーに基づいて 1 つのブロックをキャッシュできるようにします。

{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}

他のブロックはすべてのユーザーで同じでした

{% cache 500 questions %}
    .. questions list ..
{% endcache %}

Django Template fragment caching docsを見てください。

于 2012-12-10T12:27:10.133 に答える