Макет Генши включает в хамелеон ZPT - PullRequest
2 голосов
/ 28 января 2011

В 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 несколько недель назад, но он все еще был слишком глючным для производства.

Спасибо.

1 Ответ

2 голосов
/ 15 февраля 2011

Вы можете попробовать что-то вроде этого:

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>

Я только начал использовать Chameleon ZPT, так что если кто-то может указать на какие-либо недостатки в моем примере, я буду признателен:)

...