2

Genshi では、インクルード フォー レイアウトを実行できます (これは、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"""

これは Chameleon 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>

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>

Chameleon ZPT を使い始めたばかりなので、誰かが私の例の欠陥を指摘できれば幸いです :)

于 2011-02-15T12:16:32.717 に答える