1

这是我在 Pyramid 中使用的一些代码,用于将宏加载到我的 Chameleon 模板中:

@subscriber(BeforeRender)
def add_base_templates(event):
    """Define the base templates."""
    main_template = get_renderer('../templates/restaurant.pt').implementation()
    event.update({ 'main_template': main_template })

如果没有 Pyramid,我将如何实现同样的目标?例如,在这段代码中:

from chameleon import PageTemplateFile

path = os.path.dirname(__file__)
lizard = PageTemplateFile(os.path.join(path, '..', 'emails', template+'.pt'))
html = lizard(**data)
4

1 回答 1

1

让我们看看你的代码做了什么;要在金字塔之外使用宏,您所要做的就是复制它。

  1. 当您调用.implementation()金字塔时,您实际上是在检索PageTemplateFile加载了正确模板路径的实例。

  2. BeforeRender事件让您从视图修改 dict 响应,并在您的add_base_templates事件处理程序中添加一个名为 的新条目main_template

将这两者结合起来,在你自己的代码中得到同样的效果,在main_template调用你的模板时传入一个宏lizard模板:

from chameleon import PageTemplateFile

path = os.path.dirname(__file__)
main_template = PageTemplateFile(os.path.join(path, '..', 'templates', 'restaurant.pt'))
lizard = PageTemplateFile(os.path.join(path, '..', 'emails', template+'.pt'))
html = lizard(main_template=main_template, **data)

这就是它的全部,真的。

于 2012-07-28T20:04:02.293 回答