¿Cómo agrego contenido antes de body> en la página extendida? (plantillas KID)
-
22-09-2019 - |
Pregunta
Tengo (simplificado):
<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>
Y mypage.kid:
<html>
<head></head>
<body>
<p>Hello World!</p>
</body>
</html>
Ahora quiero que sea posible añadir más contenido antes de la etiqueta </body>
en el HTML resultante, específico para mypage.kid.
Básicamente, el resultado debería ser algo así:
<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>
La etiqueta <script>
debe especificarse en mypage.kid. Está bien si tengo que modificar master.kid a opcionalmente Soporte contenido adicional antes de la etiqueta </body>
, pero lo que el contenido es tiene para especificar en mypage.kid.
Al principio pensé añadiendo un elemento antes de la etiqueta </body>
en master.kid con py:match="item.tag == 'bodyend'"
funcionaría. El problema es que utiliza la posición del elemento en mypage.kid, y no la posición del elemento haciendo py:match
. Así que si pongo la etiqueta antes de <bodyend>
</body>
en mypage.kid, se importa antes <p id="footer">
, y si lo pongo a continuación </body>
se quedará allí.
¿Cómo puedo configurar master.kid y mypage.kid para apoyar la adición de contenido inmediatamente antes de la etiqueta </body>
?
Solución
La mejor solución que he encontrado es la siguiente:
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>
Los controles página master.kid para una variable definida como body_end
, y si hay una variable tal, se llamará a que, en sustitución de los contenidos del elemento antes de </body>
(de lo contrario, nada de salida).
Cualquier página que necesita el contenido de salida antes de </body>
definirá la función body_end
usando py:def="body_end()"
. El py:strip="True"
está ahí para quitar el envoltorio <div>
.