2011-12-01 89 views
0

我写了一个自定义模板加载器和模板可以在服务器的生命周期内发生改变。据我了解,第一次加载模板时,它被分析到内存节点树中,然后被缓存。是否有可能在Django中重新加载模板?

是否有可能通过发出命令说“卸载该模板因此被重新加载下一次”这个缓存失效?或者我的模板加载器可以处理这个问题?

回答

2

此:

第一次模板被加载它被解析到内存节点树中并且之后被缓存

不是真的。如果你问他们,模板只会被缓存。您可以启用caching template loader,但默认情况下它未启用。

所以,在回答你的问题,如果你使用一个自定义的加载,你不希望他们被缓存,不要把该功能集成到您的自定义加载程序。

+0

很酷。我认为这可能是'django.template.loaders.cached.Loader'的原因,但想确定。 – Joe

0

我敢肯定,你做你不想做的东西。绕过缓存也就是说......

的方式是绕过装载系统和手动从文件加载模板:

from django.http import HttpResponse 
from django.template import Template, RequestContext 

# open the template file and save it to a string in memory 
template_as_string = open('/path/to/template/file.html').read() 

# make any dynamic modifications to your template string here, 
# including saving back to file if necessary 

# get and render a Django template, return an HttpResponse 
template = Template(template_as_string) 
return HttpResponse(template.render(context=RequestContext(request, { 
    # variables to be sent to the template for rendering 
}) 
+0

相信我,有一个自定义模板加载器(从文件系统没有得到模板)一个很好的理由。这些在视图函数内部没有改变。 – Joe

+0

“有一个很好的理由”是无益的。如果我们不知道你想要做什么,很难给你提供正确的建议/帮助。从文件系统加载并不是重点;我要做的就是直接加载模板作为字符串,如果它基本上是可变的。 –

+0

对不起,我不认为'做你不想做的事'是讨论的核心。我正在做的是使用自定义命名方案从数据库加载模板。除了模板加载器,它在加载模板时对视图透明。这些模板可能会在数据库中发生变化,当它们发生变化时,必须在加载的模板中反映出这些变化。当模板更改FWIW时,我可以提出事件。 – Joe

相关问题