2012-10-25 162 views
2

我使用金字塔1.3和他們的模板寫在變色龍。 由於不同的頁面或模板可能需要每頁的全局樣式表更改,因此我希望能夠重新定義頁面上的主體標籤的類(當然,我更願意從模板中進行此操作)。變色龍模板全局變量

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

我曾嘗試:

  • 使用TAL:從submacros定義= 「全球body_class」。不起作用。
  • 我試過使用<metal:div metal:define-slot="vars">...variable definition...</metal:div><metal:div metal:fill-slot="vars">...redefinition...</metal:div>,並重新定義了子宏中的變量。它確實有效,但是如果我在父模板中有幾個變量定義並且我只需要重新定義一個變量定義呢?

有沒有更好的方法來做到這一點與金屬更好?

回答

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> 
+0

您使用什麼版本的Chameleon來測試此解決方案? –

+0

@AndreyCizov:none;我在此基於(很多)TAL(zope頁面模板)的經驗做出假設。可能是Chameleon的實現已經優化了這個代碼路徑。 –