Как добавить контент перед </body> на расширенной странице?(шаблоны KID)

StackOverflow https://stackoverflow.com/questions/1999300

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top