Comment puis-je ajouter le contenu avant body> dans la page élargie? (modèles KID)
-
22-09-2019 - |
Question
J'ai master.kid (simplifié):
<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>
Et mypage.kid:
<html>
<head></head>
<body>
<p>Hello World!</p>
</body>
</html>
Maintenant, je veux qu'il soit possible d'ajouter plus de contenu avant la balise </body>
dans le code HTML résultant, spécifique à mypage.kid.
Fondamentalement, le résultat devrait être quelque chose de ceci:
<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 balise <script>
doit être spécifié dans mypage.kid. Il est normal si je dois modifier master.kid en option support du contenu supplémentaire avant la balise </body>
, mais ce que le contenu est a à préciser dans mypage.kid.
Dans un premier temps je me suis dit en ajoutant un élément avant la balise </body>
dans master.kid avec py:match="item.tag == 'bodyend'"
fonctionnerait. Le problème est qu'il utilise la position de l'élément dans mypage.kid, et non la position de l'élément faisant py:match
. Donc, si je mets la balise <bodyend>
avant </body>
dans mypage.kid, il est importé avant <p id="footer">
, et si je le mets ci-dessous </body>
il y restera.
Comment puis-je mis en place master.kid et mypage.kid pour soutenir l'ajout de contenu immédiatement avant la balise </body>
?
La solution
La meilleure solution que j'ai trouvé est le suivant:
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>
Les contrôles de page master.kid pour une variable définie comme body_end
, et s'il y a une telle variable, il l'appellera, en remplaçant le contenu de l'élément avant </body>
(sinon il ne affichera rien).
Toute page qui a besoin au contenu de sortie avant </body>
définira la fonction body_end
en utilisant py:def="body_end()"
. Le py:strip="True"
est là pour enlever le <div>
d'emballage.