2011-01-28 28 views
2

在元史,你可以做包括佈局(這對我來說是要確保所有的500個內容模板,將具有相同佈局的唯一途徑) -元史佈局包括變色龍ZPT

"""layout.xml""" 
<py:match path="head" once="true"> 
    <head py:attrs="select('@*')"> 
    <title>Myapp</title> 
    </head> 
</py:match> 
<py:match path="body" once="true"> 
    <body py:attrs="select('@*')"> 
    <div class="main_content"> 
     <div py:strip="True">${select('*|text()')}</div> 
    </div> 
    </body> 
</py:match> 
"""layout.xml""" 

"""index.xml""" 
<html xmlns:py="http://genshi.edgewall.org/" xmlns:xi="http:// 
www.w3.org/2001/XInclude"> 
    <xi:include href="layout.xml" parse="xml"/> 
    <head /> 
    <body> 
    <h3>index</h3> 
    </body> 
</html> 
"""index.xml""" 

"""rendered index.html""" 
<html> 
    <head> 
    <title>Myapp</title> 
    </head> 
    <body> 
    <div class="main_content"> 
     <h3>index</h3> 
    </div> 
    </body> 
</html> 
"""rendered index.html""" 

這是可能在變色龍ZPT?順便說一句,幾周前我已經嘗試過Chameleon-genshi,但它對於生產來說仍然太麻煩。

謝謝。

回答

2

你可以嘗試這樣的事:

layout.pt

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:tal="http://xml.zope.org/namespaces/tal" 
    metal:define-macro="layout"> 
<head> 
    <title>${page_title} :: My Website</title> 
</head> 
<body> 
    <div metal:define-slot="main_content"> 
     Content 
    </div> 
</body> 
</html> 

index.pt

<html metal:use-macro="layout.macros['layout']" 
    tal:define="page_title 'Title';"> 
<div metal:fill-slot="main_content"> 
    <h2 tal:content="page_title"> 
     Title 
    </h2> 
</div> 
</html> 

其中給出:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Title :: My Website</title> 
</head> 
<body> 
    <div> 
    <h2>Title</h2> 
</div> 

</body> 

我剛開始使用變色龍ZPT因此,如果任何人都可以指出我的例子任何瑕疵我將不勝感激:)

+0

看起來不錯,但index.pt仍然需要指定插槽名稱「 main_content「來匹配layout.pt中的內容,這意味着layout.pt不能被自由地重新考慮。對不起,我不能接受這個答案,因爲它還沒有達到Genshi提供的自由水平。 – Jerry 2011-02-16 09:13:38