2

我正在使用 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>and<metal:div metal:fill-slot="vars">...redefinition...</metal:div>并重新定义子宏中的变量。它确实有效,但是如果我在父模板中有多个变量定义并且我只需要重新定义一个怎么办?

有没有用 METAL 做得更好的好方法?

4

1 回答 1

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>

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

<rootelement metal:use-macro="macroname">
    <metal:overrides fill-slot="overrides"><tal:defines define="global var1 differentvalue" /></metal:overrides>
</rootelement>
于 2012-10-25T20:26:29.850 回答