变色龙模板全局变量

时间:2012-10-25 16:24:09

标签: python pyramid chameleon template-metal

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

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

我尝试过:

  • 从submacros使用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有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

页面模板中的全局变量(如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>