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>
</body>
</html>

和 mypage.kid:

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

现在我希望可以</body>在生成的 HTML 中的标记之前添加更多内容,具体到 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>

<script>标记应在 mypage.kid 中指定。如果我必须修改 master.kid 以选择性地</body>支持标记之前的附加内容,这没关系,但必须在 mypage.kid 中指定内容。

起初,我认为</body>在 master.kid 的标签之前添加一个元素py:match="item.tag == 'bodyend'"会起作用。问题是它使用了 mypage.kid 中元素的位置,而不是 doing 元素的位置py:match。所以如果我把<bodyend>标签</body>放在 mypage.kid 之前,它是在之前导入<p id="footer">的,如果我把它放在下面</body>,它会留在那里。

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

4

1 回答 1

1

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

主子:

<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>

于 2010-01-11T20:47:22.700 回答