3

デコレータを使用してキャッシュを有効にする Django ビューがあります。

@cache_page(24 * 60 * 60) # cache for 24 hours
def index(request):
    # view code

このビューは、次のようなテンプレートに対応しています。

{% extends "base.html" %}

{% load i18n %}

{% block content %}
    html code
{% endblock %}

base.html:

{% load i18n %}
<!DOCTYPE html>
<html>
<head>
      <div id="content">
      {% block content %}
      {% endblock %}
      </div>

      <!-- need to tun off caching here... -->
      <div id="sidebar">
          {% include "language_switcher.html" %}
          {% include "login_box.html" %}
      </div>
      <!-- ...and then back on -->

</body>
</html> 

サイドバーには、キャッシュしてはいけない動的要素がいくつかあります。テンプレートのこの部分 (サイドバー) のみのキャッシュを「オフ」にするにはどうすればよいですか?

どんな助けでも大歓迎です。

4

3 に答える 3

3

このアプリを確認してください:https ://github.com/codysoyland/django-phasedおよびこのブログ投稿:http ://www.holovaty.com/writing/django-two-phased-rendering/

于 2012-05-10T16:26:31.530 に答える
2

テンプレート フラグメント キャッシングについてはご存知だと思いますが、ここで低い値を設定しても、より長い期間に設定されたビュー レベルのキャッシュが上書きされるとは思いません。もちろん、これは index.html のさまざまな部分を個別にキャッシュする必要があることを意味します。これは実現可能ですが、必要なものではない可能性があります。

ここclearcacheに実装されているテンプレート フラグメントのタグも参照してください。

于 2012-05-10T16:05:49.893 に答える
1

あなたは本当にできません。ビュー全体をキャッシュすると、Django はそれをまったく処理しません。完全に形成された HTML を含む同じ応答をキャッシュから返すだけです。変更ヘッダーをキャッシュに追加できますが、変更するものがない限り (ログインしているユーザーなど)、役に立ちません。他の何にも関連付けられていないコンテンツの変更の基本的なブロックだけでは役に立ちません。

ビュー レベルのキャッシュを削除し、必要なビュー内のものを手動でキャッシュします。そうでなければ、あなたは運が悪いです。

于 2012-05-10T16:06:49.843 に答える