2010-01-04 7 views
1

J'ai master.kid (simplifié):Comment ajouter du contenu avant</body> dans une page étendue? (modèles 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> 
</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 </body> tag 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 correct si je dois modifier master.kid à en option soutenir le contenu supplémentaire avant la balise </body>, mais quel est le contenu a à préciser dans mypage.kid.

Au début, je pensais ajouter 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, elle est importée avant <p id="footer">, et si je la mets en dessous de </body> elle restera là.

Comment puis-je configurer master.kid et mypage.kid pour prendre en charge l'ajout de contenu immédiatement avant le tag </body>?

Répondre

1

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éfini comme body_end, et s'il existe une telle variable, il l'appellera, en remplaçant le contenu de l'élément avant </body> (sinon il ne produira rien).

Toute page devant générer un contenu avant </body> définira la fonction body_end à l'aide de py:def="body_end()". Le py:strip="True" est là pour enlever l'emballage <div>.