Pregunta

master.kid

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>?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top