从freemarker的列表中获取子列表
Posted
技术标签:
【中文标题】从freemarker的列表中获取子列表【英文标题】:Get sub list from a list in freemarker 【发布时间】:2013-08-29 18:52:15 【问题描述】:我有一个免费标记列表如下:
<#assign listVar = ["v1", "v2", "v3", "v4" ] />
从上面的列表中,我只希望子列表为 v1 和 v2。
我一直在寻找免费标记中的子列表。但是没能找到。
任何帮助将不胜感激。
【问题讨论】:
可能会有所帮助link1,link2 我认为这个 sn-p 为您的要求提供了一个想法 $x #if> 但是,我不想根据列表的内容获取子列表。相反,我想要基于列表的索引。有什么想法吗? 【参考方案1】:如果您真的想根据索引制作该切片:
<#assign listVar = ["v1", "v2", "v3", "v4" ] />
<#assign sublistVar = listVar[0..1] />
见Freemarker Sequence slicing。
但请注意,如果索引超出范围,它将因错误而停止。根据您的需要,您可能需要改用?chunk(2)
。
更新:为了避免 index-out-of-bounds 错误,在 FreeMarker 2.3.21 中,您可以发出 listVar[0..*2]
,这将切出 2 个项目,如果可用的项目更少,则更少。 (还有独享端切片可以派上用场:listVar[0..<2]
)
【讨论】:
你拯救了我的一天。 嗨丹尼尔!您能否在built-ins 和sequence directives 中提及这一点?使用关键字subsequence
和sublist
。并带有指向this 的链接。谢谢!【参考方案2】:
您可以在列出序列时使用index
变量。
<#assign listVar = ["v1", "v2", "v3", "v4" ] />
<#list listVar as aVar>
<#if aVar_index > 2><#break/></#if>
</#list>
您还可以使用chunk
对序列进行分区。这会将序列拆分为给定大小的多个序列。
<#assign partitions = listVar?chunk(2) />
<#assign firstPartition = partitions?first />
来源:FreeMarker Manual
但是,最好在将数据传递给模板之前对其进行过滤。
【讨论】:
以上是关于从freemarker的列表中获取子列表的主要内容,如果未能解决你的问题,请参考以下文章
如何从 FreeMarker 模板调用对象的 java 方法?