我正在使用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/