Comment puis-je ajouter le contenu avant dans la page élargie? (modèles KID)

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

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top