我有 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 中元素的位置,而不是执行 py:match
的元素的位置。 。所以如果我输入 <bodyend>
之前的标签 </body>
在mypage.kid中,它是在<p id="footer">
之前导入的,如果我把它放在 </body>
下面它会留在那里。
如何设置 master.kid 和 mypage.kid 以支持在 </body>
之前添加内容标签?
最佳答案
我发现的最佳解决方案如下:
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>
我的页面.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>
.
关于python - 如何在扩展页面的 </body> 之前添加内容? ( child 模板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999300/