Как добавить контент перед </body> на расширенной странице?(шаблоны KID)
-
22-09-2019 - |
Вопрос
У меня есть 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>
ярлык?
Решение
Лучшее решение, которое я нашел, следующее:
мастер.ребенок:
<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>
моястраница.ребенок:
<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>
.