Macros 如何将宏与pyramid/ZPT(变色龙)一起使用
我想使用带有金字塔+ZPT引擎(变色龙)的宏 文档中说“一个页面模板可以容纳多个宏。” 因此,我定义了一个文件Macros 如何将宏与pyramid/ZPT(变色龙)一起使用,macros,pyramid,chameleon,template-tal,template-metal,Macros,Pyramid,Chameleon,Template Tal,Template Metal,我想使用带有金字塔+ZPT引擎(变色龙)的宏 文档中说“一个页面模板可以容纳多个宏。” 因此,我定义了一个文件 宏.pt: <div metal:define-macro="step-0"> <p>This is step 0</p> </div> <div metal:define-macro="step-1"> <p>This is step 1</p> </div> 到目前为止,我痛
宏.pt
:
<div metal:define-macro="step-0">
<p>This is step 0</p>
</div>
<div metal:define-macro="step-1">
<p>This is step 1</p>
</div>
到目前为止,我痛苦地发现,我不能只说use macro=“main_template.pt”
,因为变色龙不像Zope那样自动加载模板。因此,我不得不在之前添加load:
代码段
进入使用macro=“step-0”
。这将为步骤-0
引发NameError。我试图用类似于
的东西预加载宏.pt
,但这没有帮助
如何使用收集在宏摘要文件中的宏?要在金字塔中使用ZPT宏,需要通过将宏模板,甚至宏本身传递到渲染模板(摘自文档),使渲染模板可以使用宏模板本身 在渲染器将使用的模板中,您应该像这样引用宏。我假设main_template.pt中包含槽“content”的宏名为“global_layout”。把它改成你的名字
<html metal:use-macro="main.macros['global_layout']">
<div metal:fill-slot="content">
...
<div metal:use-macro="snippets.macros['step-0']"></div>
...
</div>
</html>
我可以解释得更多,但看看这些文件。这里描述了一个类似上述的简单案例
之后,金字塔文档将提供更多细节。欢迎来到pyramid。从Zope pagetemplates体验中,我希望tal:define=“macros\u template load:macros.pt”metal:use macro=“macros\u template.macros['step-0']”起作用;每个模板对象都有一个
宏
属性,每个包含的宏都有键。我还没有尝试过变色龙。我如何使用同一个文件中定义的宏呢?我用变色龙文档中提供的信息和我已经提到的链接扩展了答案。下次请再问一个问题。祝您好运。最后两个链接已断开。
from pyramid.renderers import get_renderer
from pyramid.view import view_config
@view_config(renderer='templates/progress.pt')
def my_view(request):
snippets = get_renderer('templates/macros.pt').implementation()
main = get_renderer('templates/main_template.pt').implementation()
return {'main':main,'snippets':snippets}
<html metal:use-macro="main.macros['global_layout']">
<div metal:fill-slot="content">
...
<div metal:use-macro="snippets.macros['step-0']"></div>
...
</div>
</html>
<div metal:use-macro="template.macros['step-0']">
<div metal:fill-slot="content">
added your content
</div>
</div>
<div metal:define-macro="step-0">
a placeholder for your content
<div metal:define-slot="content">
</div>
</div>
macros = get_renderer('templates/main_template.pt').implementation().macros