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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top