في الصفحة الموسعة؟ (قوالب الأطفال)
https://stackoverflow.com/questions/1999300
سؤال
لقد حصلت على 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>
علامة في 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>
بطاقة شعار؟
المحلول
أفضل الحلول التي وجدتها هي ما يلي:
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>
.