na página estendida? (Modelos para crianças)
https://stackoverflow.com/questions/1999300
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?
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>
.