gpt4 book ai didi

plone - 为什么在 fill-slot 或 Define-macro 元素外部定义的变量在该元素内部不可见?

转载 作者:行者123 更新时间:2023-12-02 04:10:21 25 4
gpt4 key购买 nike

为什么在 fill-slotdefine-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>

无法计算带有变量a 的tales-表达式。 b 当然是可见的。

另一方面,如果变量 cdefine-slot 的封闭元素中定义,如下所示,则它是可见的。

<div tal:define="c string:c">
<metal:text define-slot="content-core"></metal:text>
</div>

看起来变量只有在插入槽后才会被计算。

最佳答案

仅当您在该上下文中查看宏时,TAL 宏的上下文才有意义。如果您正在查看包含宏的模板,则会解释它,但如果您正在使用宏,则不会解释它。从某种意义上说,宏只是将运行时从包含宏的模板复制到使用它的页面,然后进行扩展。所有 namespace 都来自使用宏的模板。

换个角度思考:宏不是一种作用域语言。如果是的话,您将根本无法从另一个模板中看到该宏。 TAL 必须要复杂得多,而且你必须考虑闭包和函数。

“宏”语言之所以被称为“宏”语言,是因为宏在使用时会被扩展。它们不是函数。

那么,为什么包含模板要包含宏的上下文呢?他们不必这样做。通常这样做是为了在现实环境中测试宏。 (尽管有时宏位于独立有用的页面内。)

关于plone - 为什么在 fill-slot 或 Define-macro 元素外部定义的变量在该元素内部不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com