0

RAMにいくつかの設定を保持する必要があります。ファイル「cache_values.py」を作成しました

class CacheValue:
    pass

必要に応じて変数コンテナーとして使用したい。

サーバーの起動時に「CacheValue」にいくつかの設定を書き込んでいます:

from cms.models.pagemodel import Page
from modifier.cache_values import CacheValue

def cache_start_values():
   CacheValue.page_publish_dates={}

   pages=Page.objects.all()
   for page in pages:
       CacheValue.page_publish_dates[page.pk]=page.last_publish_date

   CacheValue.last_publish_date=max(CacheValue.page_publish_dates.values())

また、モデルを保存するときに、これらの設定を変更します

CacheValue.page_publish_dates[self.pk]=self.last_publish_date
CacheValue.last_publish_date=max(CacheValue.page_publish_dates.values())

しかし、テンプレートでこの設定を使用したい場合は、変数としてコンテキスト プロセッサを使用してそれらを追加することにより、いくつかの魔法が始まります。

from modifier.cache_values import CacheValue
def add_for_cache_info(request):
    context_extras = {}
    context_extras['page_publish_dates']=CacheValue.page_publish_dates
    context_extras['last_publish_date_all_pages']=CacheValue.last_publish_date
    if "current_page" in request.__dict__:
        context_extras['last_publish_date']=CacheValue.page_publish_dates[request.current_page.pk]   

    return context_extras 

テンプレート内

  {{ page_publish_dates }}
  {{ last_publish_date_all_pages }}

レンダリングされたテンプレートに表示される値は、ページを参照するたびに古いもの (モデルの保存前) と新しいもの (モデルの保存後) が交互に表示されます。0_0 0_0

モデル (値の変更) を 2 回目に保存すると、最も古い値と新しい値が交互に表示されます。

なんで?

4

1 に答える 1

2

複数の Django プロセスが実行されており、各プロセスには独自の のコピーがありCacheValueます。代わりにDjango のキャッシュ フレームワークを使用してください。

于 2013-08-30T00:12:20.400 に答える