如何在扩展页面之前添加内容? (KID模板)

时间:2010-01-04 12:37:13

标签: python turbogears

我有master.kid(简化):

<html>
<head py:match="item.tag == 'head'">
  <title>My Site</title>
</head>
<body py:match="item.tag == 'body'">
  <h1>My Site</h1>
  <div py:replace="item[:]"></div>
  <p id="footer">Copyright Blixt 2010</p>
</body>
</html>

和mypage.kid:

<html>
<head></head>
<body>
  <p>Hello World!</p>
</body>
</html>

现在我希望可以在生成的HTML中的</body>标记之前添加更多内容,特定于mypage.kid。

基本上结果应该是这样的:

<html>
<head>
  <title>My Site</title>
</head>
<body>
  <h1>My Site</h1>
  <p>Hello World!</p>
  <p id="footer">Copyright Blixt 2010</p>
  <script type="text/javascript">alert('Hello World!');</script>
</body>
</html>

应在mypage.kid中指定<script>标记。如果我必须修改master.kid到可选支持</body>标记之前的其他内容,但是在mypage中指定的内容是没关系的。孩子。

首先,我想在master.kid中的</body>标记之前添加一个元素,其中py:match="item.tag == 'bodyend'"会起作用。问题是它使用mypage.kid中元素的位置,而不是元素执行py:match的位置。因此,如果我在<bodyend>之前将</body>标记放在mypage.kid中,则会在<p id="footer">之前导入,如果我将其放在</body>之下,它将会保留在那里。

如何设置master.kid和mypage.kid以支持在</body>代码之前添加内容?

1 个答案:

答案 0 :(得分:1)

我发现的最佳解决方案如下:

master.kid:

<html>
<head py:match="item.tag == 'head'">
  <title>My Site</title>
</head>
<body py:match="item.tag == 'body'">
  <h1>My Site</h1>
  <div py:replace="item[:]"></div>
  <p id="footer">Copyright Blixt 2010</p>
  <div py:if="defined('body_end')" py:replace="body_end()"></div>
</body>
</html>

mypage.kid:

<html>
<head></head>
<body>
  <p>Hello World!</p>
  <div py:def="body_end()" py:strip="True">
    <script type="text/javascript">alert('Hello World!');</script>
  </div>
</body>
</html>

master.kid页面检查定义为body_end的变量,如果有这样的变量,它将调用它,在</body>之前替换元素的内容(否则它将输出没有)。

需要在</body>之前输出内容的任何页面都将使用body_end定义py:def="body_end()"函数。 py:strip="True"可以移除包裹<div>