2

在 Genshi 中,您可以对布局进行 include(对我来说,这是确保所有 500 个内容模板都具有相同布局的唯一方法)-

"""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,但它对于生产来说仍然太麻烦了。

谢谢。

4

1 回答 1

2

你可以尝试这样的事情:

布局.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>

索引.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>

我刚开始使用 Chameleon ZPT,所以如果有人能指出我的示例中的任何缺陷,我将不胜感激 :)

于 2011-02-15T12:16:32.717 回答