我正在使用Pyramid 1.3及其用Chameleon编写的模板。
由于不同的页面或模板可能需要在每个页面上更改全局样式表,因此我希望能够在页面上重新定义body标签的类(当然,我希望从模板中进行此操作)。

<body class="${global_variable_or_something_else}"></body>


我尝试过的


从子宏使用tal:define =“ global body_class”。不起作用
我尝试使用<metal:div metal:define-slot="vars">...variable definition...</metal:div><metal:div metal:fill-slot="vars">...redefinition...</metal:div>,并重新定义了子宏中的变量。它确实有效,但是如果我在父模板中有几个变量定义并且只需要重新定义一个,该怎么办?


使用METAL可以更好地做到这一点吗?

最佳答案

页面模板中的全局变量(如Python中的全局变量)可以被覆盖。因此,您改为执行以下操作:



<rootelement metal:define-macro="macroname"
             tal:define="global var1 value1; global var2 value2">
    <metal:overrides define-slot="overrides"></metal:overrides>
    <!-- some template code using var1 and var2 -->
</rootelement>


然后使用metal:fill-slot提供替代;您可以根据需要覆盖尽可能少的变量:

<rootelement metal:use-macro="macroname">
    <metal:overrides fill-slot="overrides"><tal:defines define="global var1 differentvalue" /></metal:overrides>
</rootelement>

关于python - 变色龙模板全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13073015/

10-13 00:24