【问题标题】:Some questions regarding Mako modules, Mako's TemplateLookup function, and Pyramid关于 Mako 模块、Mako 的 TemplateLookup 函数和 Pyramid 的一些问题
【发布时间】:2012-02-20 03:49:38
【问题描述】:

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

  1. 创建了哪些“模块”?这些像预编译的 .pyc 文件吗?
  2. 使用 TemplateLookup 与 Pyramid 的 render() 或 render_to_response() 是否可以让模板更快?
  3. Pyramid 是否默认创建这些模块,但隐藏在用户看不到的地方?
  4. 从文档中,它说这些模块缓存在内存中。这与通过 Beaker 进行缓存有何不同?

由于我网站上的所有内容都是动态内容(基本上除了页脚),我想找出缓存模板或加速渲染的最佳方法,这看起来是一种加速渲染的简单方法,如果它甚至可以。

【问题讨论】:

    标签: python pyramid mako


    【解决方案1】:

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

    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对象,所以不会有任何区别。

    3. 我在pyramid.mako_templating.renderer_factory 中看到有一个名为mako.module_directory 的设置。这与其他类似设置一起,可用于控制mako 库行为以创建模块文件。我看起来默认行为不是创建这些文件(mako.module_directory 默认为 None),但您当然可以做任何您需要的事情。

    4. TemplateLookup 中看到一个名为cache_impl 的参数,默认设置为beaker,所以我想没有任何区别。

    【讨论】:

    • 所以我终于在金字塔上找到了关于它的文档(我总是需要一段时间才能找到我在那个网站上寻找的任何东西......)。似乎没有设置 mako.module_directory 默认情况下只是将所有模块保存到内存中。我觉得这很令人困惑,因为 Mako 说保存到目录的模块也保存到内存中。我想我只是要使用 Pyramid 的功能!
    • 你的意思是MakoLookupTemplateRenderer
    • @Tshepang 自从我写下答案后,代码可能已经改变。从我现在看到的情况来看,MakoLookupTemplateRenderer 使用 lookup 属性,该属性是使用 PkgResourceTemplateLookup 创建的,该属性在后台使用 TemplateLookup
    【解决方案2】:

    请参阅 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
    

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 2013-03-28
      • 2011-09-20
      • 2012-10-25
      • 1970-01-01
      • 2011-11-18
      • 2011-11-15
      • 2012-05-28
      • 2011-10-01
      相关资源
      最近更新 更多