Como adiciono conteúdo antes na página estendida? (Modelos para crianças)

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

  •  22-09-2019
  •  | 
  •  

Pergunta

Eu tenho mestre.kid (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>

E mypage.kid:

<html>
<head></head>
<body>
  <p>Hello World!</p>
</body>
</html>

Agora eu quero que seja possível adicionar mais conteúdo antes do </body> Tag no HTML resultante, específico para mypage.kid.

Basicamente, o resultado deve ser algo:

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

o <script> A tag deve ser especificada em mypage.kid. Tudo bem se eu tiver que modificar mestre.kid para opcionalmente suportar conteúdo adicional antes do </body> tag, mas qual é o conteúdo tem a ser especificado em mypage.kid.

No começo, imaginei adicionar um elemento antes do </body> tag em Master.kid com py:match="item.tag == 'bodyend'" podia funcionar. O problema é que ele usa a posição do elemento em mypage.kid, e não a posição do elemento fazendo py:match. Então, se eu colocar o <bodyend> tag antes </body> em mypage.kid, é importado antes <p id="footer">, e se eu colocá -lo abaixo </body> vai ficar lá.

Como faço para configurar mestre.kid e mypage.kid para apoiar a adição de conteúdo imediatamente antes do </body> marcação?

Foi útil?

Solução

A melhor solução que encontrei é a seguinte:

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>

A página master.kid verifica uma variável definida como body_end, e se houver uma variável, ele chamará, substituindo o conteúdo do elemento antes </body> (caso contrário, ele não produzirá nada).

Qualquer página que precise gerar conteúdo antes </body> definirá o body_end função usando py:def="body_end()". o py:strip="True" Existe para remover o embrulho <div>.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top