wol*_*evo 2 plone zpt template-tal template-metal
为什么在该元素内部fill-slot或define-macro元素外定义的变量不可见?
<body tal:define="a string:a">
<metal:content-core fill-slot="content-core">
<metal:content-core define-macro="content-core"
tal:define="b string:b">
<div tal:content="a" />
<div tal:content="b" />
<div tal:content="c" />
</metal:content-core>
</metal:content-core>
</body>
Run Code Online (Sandbox Code Playgroud)
a无法评估带变量的故事表达式.当然b是可见的.
另一方面,如果变量c是在如下所示的封闭元素中定义define-slot的那么它是可见的.
<div tal:define="c string:c">
<metal:text define-slot="content-core"></metal:text>
</div>
Run Code Online (Sandbox Code Playgroud)
看起来只有在插入插槽后才会评估变量.
只有在该上下文中查看宏时,TAL宏的上下文才有意义.如果您正在查看包含宏的模板,则会被解释,但如果您正在使用宏,则不会.从某种意义上说,宏只是将运行时从包含宏的模板复制到使用它的页面,然后进行扩展.所有名称空间都来自使用宏的模板.
用另一种方式来思考:宏不是范围内的语言.如果是,您将无法从另一个模板中看到宏.TAL必须非常复杂,你必须考虑闭包和功能.
调用"宏"语言是因为宏在使用时会被扩展.它们不是功能.
那么,为什么包含模板包含宏的上下文呢?他们不必.通常这样做可以在真实环境中测试宏.(尽管有时宏是内部页面,它们是独立有用的.)
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |