1

私は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>
</body>
</html>

そしてmypage.kid:

<html>
<head></head>
<body>
  <p>Hello World!</p>
</body>
</html>

</body>ここで、mypage.kidに固有の、結果のHTMLのタグの前にコンテンツを追加できるようにしたいと思います。

基本的に、結果は次のようになります。

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

<script>タグはmypage.kidで指定する必要があります。タグの前に追加のコンテンツをオプションでサポートするようにmaster.kidを変更する必要がある場合でも問題ありませんが</body>コンテンツが何であるかをmypage.kidで指定する必要があります。

</body>最初は、master.kidのタグが機能する前に要素を追加することを考えましたpy:match="item.tag == 'bodyend'"。問題は、mypage.kid内の要素の位置を使用し、を実行している要素の位置を使用しないことpy:matchです。したがって、前にmypage.kidに<bodyend>タグを配置すると、前にインポートされ、下に配置するとそこに残ります。</body><p id="footer"></body>

</body>タグの直前にコンテンツを追加できるようにmaster.kidとmypage.kidを設定するにはどうすればよいですか?

4

1 に答える 1

1

私が見つけた最善の解決策は次のとおりです。

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>

master.kidページは、として定義された変数をチェックし、body_endそのような変数がある場合はそれを呼び出し、前の要素の内容を置き換えます</body>(そうでない場合は何も出力しません)。

前にコンテンツを出力する必要があるページは、を使用して関数を</body>定義します。ラッピングを削除するためにあります。body_endpy:def="body_end()"py:strip="True"<div>

于 2010-01-11T20:47:22.700 に答える