我正在尝试在生成的标记中抽象一个常见的场景,我需要一些标记来“包装”任意内容。所以不要写这个
<div class="container">
<p class="someClass">Some header</p>
<div id="foo">
<!-- The real content that changes -->
</div>
</div>
我可以写一些“喜欢”
#????
<!-- The real content that changes
#end
显然,我不知道#????将会。
据我所知,不可能用宏来做这个,不能为块的开始定义一个宏,也不能为块的结尾定义一个宏。
#macro(startContained)
<div class="container">
<p class="someClass">Some header</p>
<div id="foo">
#end
#macro(endContained)
</div>
</div>
#end
#startContained
<!-- The real content -->
#endContained
有更好的方法吗?
答案 0 :(得分:12)
使用#@
宏调用语法以及$!bodyContent
变量:
#macro(wrapper)
<div class="container">
<p class="someClass">Some header</p>
<div id="foo">
$!bodyContent##
</div>
</div>
#end
#@wrapper()
The real content that changes.
#end
#@wrapper()
Other different content.
#end
呈现为:
<div class="container">
<p class="someClass">Some header</p>
<div id="foo">
The real content that changes.
</div>
</div>
<div class="container">
<p class="someClass">Some header</p>
<div id="foo">
Other different content.
</div>
</div>
(宏体中的##
删除尾随空格;对于HTML,它可能无关紧要。)