2010-01-04 1 views
1

У меня master.kid (упрощенный):Как добавить контент до</body> на расширенной странице? (шаблоны 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> тег в полученном HTML, специфичном для mypage.kid.

В принципе результат должен быть чем-то это:

<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. Поэтому, если я поместил тег <bodyend> до </body> на mypage.kid, он импортируется до <p id="footer">, и если я положил его ниже </body>, он останется там.

Как настроить master.kid и mypage.kid для поддержки добавления содержимого непосредственно перед тегом </body>?

ответ

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_end, используя py:def="body_end()". py:strip="True" следует удалить обертку <div>.

Смежные вопросы