正在重置Django缓存模板加载程序的缓存
Django 1.2引入了一个新的模板加载器,它将数据存储在缓存中(正在重置Django缓存模板加载程序的缓存,django,django-templates,memcached,Django,Django Templates,Memcached,Django 1.2引入了一个新的模板加载器,它将数据存储在缓存中(Django.template.loaders.cached.loader) 不幸的是,我没有找到任何关于缓存如何失效以及何时和如何重置的信息 我想在我的服务器上使用它,但我不确定它是否会在django重新启动时重置(这对我来说已经足够了)。通过深入django的源代码,您可以找到当前服务器实例的模板加载器存储在django.template.loader.template\u source\u loaders 当您使用缓存加载
Django.template.loaders.cached.loader
)
不幸的是,我没有找到任何关于缓存如何失效以及何时和如何重置的信息
我想在我的服务器上使用它,但我不确定它是否会在django重新启动时重置(这对我来说已经足够了)。通过深入django的源代码,您可以找到当前服务器实例的模板加载器存储在
django.template.loader.template\u source\u loaders
当您使用缓存加载程序时,只有一个加载程序。所以您可以获取它并调用它的reset函数来重置模板缓存
下面是一些代码片段,我还没有亲自测试过
from django.template.loader import template_source_loaders
loader = template_source_loaders[0]
loader.reset()
如果选中django.template.loaders.cached
,则可以看到django只需使用一个变量template\u cache
将模板名称保存到模板路径缓存中。它不使用memcached。因此,当django重新启动时,它应该被重置
from django.template.loader import template_source_loaders
def reset_template_cache():
if not template_source_loaders:
return
for loader in template_source_loaders:
loader.reset()
好了:)只有此解决方案才能保证工作,包括生产环境,而无需重新启动服务器,即使您使用的是
'django.template.loaders.cached.Loader'
后端:
import django.template.loader
def reset_template_cache():
if django.template.loader.template_source_loaders:
for t in django.template.loader.template_source_loaders:
t.reset()
这是显式绝对导入,可用于修补全局变量。使用{%include'some_template'%}
模板标记后,您可以确定其他答案是错误的(使用loader.reset()
后不会重置'some_template'
的缓存,其中loader
只是通过相对导入导入导入的模板源加载程序的迭代器
我使用此方法使存储在数据库中的模板(由库创建)无效,并通过{%include%}将其包含到普通模板中
template tag.由于模板加载器系统已被重构,此处编写的现有解决方案打破了Django 1.9。如果您尝试使用导入模板源加载器的代码,但导入失败,请尝试以下操作:
from django.template.loader import engines
for engine in engines.all():
engine.engine.template_loaders[0].reset()
此代码假设您的模板设置使用默认的'loaders'
选项,或者只使用一个django.template.loaders.cached.Loader哦,等等……我刚刚意识到-它不使用memcached,对吗?。因此在django重新启动后它会重置……对吗?Thanx,我自己刚刚发现了这一点。所以,重新启动django服务器就足够了=)只有当您有一个线程和一个进程时,它才适用于调试服务器。生产中有许多线程和过程。在那里不行。