我正在查看Mako的文档,我找到了Mako的TemplateLookup函数:Using TemplateLookup。但是,我从未在Pyramid的文档中看到这一点,因为我从未指定过模块目录。我的问题是:
由于我网站上的所有内容都是动态内容(基本上除了页脚),我想找出缓存模板或加快渲染的最佳方法,这看起来像加速渲染的简单方法,如果它甚至可以。
答案 0 :(得分:5)
请在下面找到一些问题的答案:
对于您拥有的每个模板,都会创建一个包含渲染模板所需代码的python模块(.py
)。这只是模板的优化版本,可以从python轻松执行。执行该模块时,还会创建.pyc
文件。要检查这一点,您可以进行以下实验:
from mako.template import Template
Template(filename='template.mako', module_directory='.')
假设template.mako
存在,您会看到template.mako.py
和template.mako.pyc
已创建。
查看pyramid.mako_templating.MakoLookupRenderer.__call__
我发现用于在金字塔中呈现mako模板的方法已经使用了TemplateLookup
对象,因此没有任何区别。
我在pyramid.mako_templating.renderer_factory
中看到有一个名为mako.module_directory
的设置。这与其他类似设置一起可用于控制mako
库行为以创建模块文件。我看起来默认行为不是创建这些文件(默认情况下mako.module_directory
是None
),但你可以随心所欲地做任何事情。
在TemplateLookup
中会看到一个名为cache_impl
的参数,默认设置为beaker
,所以我猜没有任何区别。
答案 1 :(得分:3)
请参阅jcollado对前三个问题的回答。问题4:
从文档中可以看出,这些模块都缓存在内存中。这与通过Beaker缓存有什么不同?
这些缓存两个不同的东西。烧杯(或您在cache_impl
中设置的任何内容)缓存渲染输出。如果设置module_directory
,则从mako文件编译的Python模块将保存在此处。图片可能会更好地解释它:
context variables
|
v
Template() render()
.mako file -------------> python module (.py, .pyc) -----------> output
: :
| |
cached in cached
module_directory via Beaker