我目前正在使用Python开发网页,并使用Mako作为模板引擎。以前我在PHP中使用了Joomla框架。从那里,一个常见的模板技术是检查模块位置是否有要显示的模块,在这种情况下加载一些包装代码(例如包装div
),然后在其间插入模块。
对于mako,模块的比较将是<%block />
,然后由inherting文件插入。但是,我无法找到一种显示包装代码的简洁方法。
Joomla的例子:
<div>
<jdoc:include type="modules" name="my_position" style="none" />
</div>
jdoc
行等同于<%block name="my_position" />
,因为在这两种情况下,内容都会根据实际页面进行替换。现在我的问题是:如果在没有div
内容的情况下不呈现时,如何优雅地显示包裹block
? Mako是否为我提供了一个优雅的解决方案,我只是在俯视?
提前致谢。
编辑:我找到了某种解决方案,但它并不漂亮,所以如果有人能提出更清洁的解决方案,我更愿意这样做:
<%namespace name="layout" file="layout.mako" />
<%block name="my_position">
<%def name="my_element()">
## Actual position content here
</%def>
${layout.render_my_position(my_element)}
</%block>
然后,在layout.mako
:
<%block name="banner" />
...
<%def name="render_my_position(my_element)">
<div>
${my_element()}
</div>
</%def>
此解决方案有效,复制粘贴的数量相对较少,而包装div的更改很容易。然而,这仍然不是最佳解决方案,所以也许有人有更好的想法