2017-09-03 5 views
1

私はDjango 1.10のビューキャッシュを使用しています。しかし、私はキャッシュをクリアするのに問題があります。Djangoのキャッシュクリア機能はビューキャッシュでは機能しませんか?

@cache_page(60 * 30, cache="container_table") 
def container_table(request, dataset): 
    # determine container_list by a query to the database 
    return render(request, 'container_table.html',{"container_list":container_list}) 

そしてcontainer_table.htmlはcontainer_listを含むテーブルを作成し、各列は少しcheckboxと共にcontainer_listの要素を有しています。 checkboxcheckedの場合は、キャッシュをクリアします。したがって、チェックボックスをオンにすると、caches["container_table"].clear()のビューにajaxが呼び出されます。

Djangoのドキュメントから、これはそのキャッシュ内のすべてのキーをクリアする必要がありますが、私はcontainer_table.htmlのためのページを更新するとき、それはまだキャッシュを使用しているため、それが機能していません。 caches["container_table"].clear()の使い方を誤解していますか?

私はすべてをクリアすると思った!

+0

ビューの戻り値を確認していますか?例外が発生する可能性はありますか? – Selcuk

+0

例外は発生しません。 – ilikecats

答えて

0

cache_pageデコレータは、ビューコードが実行された後に結果をキャッシュに挿入します。だから私はビューを実行することで途中でキャッシュをクリアしましたが、cache_pageデコレータは直後に何かを挿入し、後でキャッシュを見ているコードはそこに少なくとも1つのキャッシュされた値を見ます。

ビューキャッシングを使用する代わりに、テンプレートキャッシングを使用していて、完全に機能しました。さらに、make_template_fragment_keyを使用すると、テンプレートフラグメントに使用されるキーを特定するのがかなり容易になります。したがって、キャッシュ内のすべてのキーを削除する必要はなく、そのフラグメントに使用されている特定のキーだけを削除することができます。

関連する問題