Wie füge ich Inhalt vor body> in erweiterten Seite? (KID templates)
-
22-09-2019 - |
Frage
Ich habe master.kid (vereinfacht):
<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>
Und mypage.kid:
<html>
<head></head>
<body>
<p>Hello World!</p>
</body>
</html>
Jetzt möchte ich es möglich sein, mehr Inhalt vor dem </body>
-Tag in dem resultierenden HTML, spezifisch für mypage.kid hinzuzufügen.
Grundsätzlich sollte das Ergebnis etwas sein, das:
<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>
Der <script>
Tag sollte in mypage.kid angegeben werden. Es ist in Ordnung, wenn ich master.kid zu optional Unterstützung zusätzliche Inhalte vor dem </body>
Tag zu ändern, aber was der Inhalt ist hat in mypage.kid angegeben werden.
Zuerst habe ich ein Element vor dem </body>
Tag in master.kid mit py:match="item.tag == 'bodyend'"
funktionieren würde, dachte hinzufügen. Das Problem ist, dass er die Position des Elements in mypage.kid verwendet, und nicht die Position des Elements zu tun py:match
. Also, wenn ich den <bodyend>
Tag vor </body>
in mypage.kid setzt, wird es vor <p id="footer">
importiert, und wenn ich es unter </body>
setzen wird es dort bleiben.
Wie richte ich master.kid und mypage.kid Inhalt zu unterstützen Zugabe unmittelbar vor dem </body>
Tag?
Lösung
Die beste Lösung, die ich gefunden habe, ist folgende:
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>
Die master.kid Seite prüft, ob eine Variable als body_end
definiert, und wenn es eine solche Variable ist, wird sie es nennen, ersetzen Sie den Inhalt des Elements vor </body>
(sonst gibt er nichts).
Jede Seite, die zur Ausgabe von Inhalten vor </body>
muss die body_end
Funktion py:def="body_end()"
definieren. Die py:strip="True"
ist es die Verpackung <div>
zu entfernen.