我目前正在用 Python 开发一个网页,并使用 Mako 作为模板引擎。以前我在 Joomla 框架中使用过 PHP。从那里开始,一种常见的模板技术是检查模块位置是否有要显示的模块,在这种情况下加载一些包装代码(例如 wrapping div
),然后将模块插入其中。
对于 mako,模块的比较将是<%block />
然后由继承文件插入的。但是,我想不出一种巧妙的方式来显示包装代码。
来自 Joomla 的示例:
<div>
<jdoc:include type="modules" name="my_position" style="none" />
</div>
该jdoc
行等效于<%block name="my_position" />
在这两种情况下,内容会根据实际页面被替换。现在我的问题是:如何在没有内容div
的情况下优雅地显示包装?Mako 是否为此提供了一个我只是忽略的优雅解决方案?block
提前致谢。
编辑:我找到了某种解决方案,但它并不漂亮,所以我希望有人能想出一个更清洁的解决方案:
<%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 的更改很容易。但是,这仍远非最佳解决方案,因此也许有人有更好的主意