我有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>
代码之前添加内容?
答案 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>
。