2

私はPyramid1.3とChameleonで書かれたそれらのテンプレートを使用しています。ページやテンプレートが異なれば、ページごとにグローバルなスタイルシートを変更する必要があるかもしれないので、ページのbodyタグのクラスを再定義できるようにしたいと思います(もちろん、テンプレートからこれを行うことをお勧めします)。

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

私が試したこと:

  • サブマクロからtal:define ="globalbody_class"を使用します。動作しません。
  • とを使用<metal:div metal:define-slot="vars">...variable definition...</metal:div>して<metal:div metal:fill-slot="vars">...redefinition...</metal:div>、サブマクロの変数を再定義しようとしました。それは機能しますが、親テンプレートに複数の変数定義があり、1つだけを再定義する必要がある場合はどうなりますか?

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>

次に、 a を使用しmetal: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 に答える