我是Apache Velocity的新手,我在确定构建模板的最佳方法时遇到了一些麻烦。在大多数指南中,我看到这些页面都是这样构建的:
#parse("header.vm")
<body>
...
</body>
#parse("footer.vm")
我也看到有人用这种方法接近“主”模板:
<head>
...
</head>
<body>
#if($activeTab=="home")
#parse("home.vm")
#elseif($activeTab=="aboutus")
#parse("aboutus.vm")
...and so on.
</body>
这看起来有点傻,但我猜它有用。
我经常使用Twirl,所以我可能会被宠坏,但是我想把模板注入另一个模板,最后是这样的主模板:
<head>
...
</head>
<body>
$content
</body>
然后将所有其他模板写为:
#parse(main){
TEMPLATE CONTENT
}
这在Velocity中可行吗?如果是的话,这是不好的做法,如果是这样,为什么? 谢谢。
答案 0 :(得分:5)
Velocity本身并不能为布局模板(您调用的主模板)提供良好的支持。但是,它们提供了一个名为Velocity Layout Servlet(VLS)的工具。
为了让您了解一下,像Rythm这样的其他模板解决方案通过template inheritance mechanism(demo)提供了非常好的模板布局管理。免责声明:我是Rythm的作者,所以我可能会有一些偏见。但是,您可以签出由第三方创建的this article,以了解不同模板解决方案的优缺点。
答案 1 :(得分:3)
您可以使用$!bodyContent
变量。
mainLayout.vm:
#macro(mainLayout)
<head>
...
</head>
<body>
$!bodyContent
</body>
#end
index.vm:
#@mainLayout()
<h1>Index page</h1>
#end