2010-01-04 77 views
1

我有master.kid(简体):如何在扩展页面的</body>之前添加内容? (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中指定的内容是,则可以。

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

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

回答

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>之前输出内容的页面将使用py:def="body_end()"定义body_end函数。 py:strip="True"是去除包装<div>

相关问题