关于Mako模块,Mako的TemplateLookup函数和Pyramid的一些问题

时间:2012-01-27 03:07:21

标签: python pyramid mako

我正在查看Mako的文档,我找到了Mako的TemplateLookup函数:Using TemplateLookup。但是,我从未在Pyramid的文档中看到这一点,因为我从未指定过模块目录。我的问题是:

  1. 什么"模块"被创造了吗?这些是预编译的.pyc文件吗?
  2. 使用TemplateLookup与Pyramid的render()或render_to_response()会更快地模板吗?
  3. Pyramid是否默认创建这些模块,但隐藏在用户无法看到的位置?
  4. 从文档中可以看出,这些模块都缓存在内存中。这与通过Beaker进行缓存有什么不同?
  5. 由于我网站上的所有内容都是动态内容(基本上除了页脚),我想找出缓存模板或加快渲染的最佳方法,这看起来像加速渲染的简单方法,如果它甚至可以。

2 个答案:

答案 0 :(得分:5)

请在下面找到一些问题的答案:

  1. 对于您拥有的每个模板,都会创建一个包含渲染模板所需代码的python模块(.py)。这只是模板的优化版本,可以从python轻松执行。执行该模块时,还会创建.pyc文件。要检查这一点,您可以进行以下实验:

    from mako.template import Template
    Template(filename='template.mako', module_directory='.')
    

    假设template.mako存在,您会看到template.mako.pytemplate.mako.pyc已创建。

  2. 查看pyramid.mako_templating.MakoLookupRenderer.__call__我发现用于在金字塔中呈现mako模板的方法已经使用了TemplateLookup对象,因此没有任何区别。

    < / LI>
  3. 我在pyramid.mako_templating.renderer_factory中看到有一个名为mako.module_directory的设置。这与其他类似设置一起可用于控制mako库行为以创建模块文件。我看起来默认行为不是创建这些文件(默认情况下mako.module_directoryNone),但你可以随心所欲地做任何事情。

  4. 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