list指令
使用方法举例
假设 users
包含 ['Joe', 'Kate', 'Fred']
序列:
<#list users as user>
${user}
输出结果为:
Joe
Kate
Fred
关于下标(序号
)
使用 ${user_index}
即可获取每一项的下标,也就是序号。默认从零开始计算:0、1、2、3.....
特殊的循环变量
在2.3.22
和之前的版本中,有两个额外的循环变量可用:
-
item_index
(已废弃,由item?index
代替): 循环中当前项的索引(从0开始的数字)。 -
item_has_next
(已废弃,由item?has_next
代替): 辨别当前项是否是序列的最后一项的布尔值。
举例
<#assign seq = {"winter","spring","sunmer","autumn"}>
<#list seq as x>
${x_index + 1}.${x}<#if x_has_next>,
<#list>
输出结果为:
1.winter,
2.spring,
3.summer,
4.autumn
else 指令
在 list
中的 else
仅从 FreeMarker 2.3.23
版本开始支持。
当没有迭代项时,才使用 else
指令:
<#list users as user>
${user}
<#else>
No users
当 users
包含0项时,输出为:
No users
items 指令
items
从 FreeMarker 2.3.23
版本开始存在
当需要在第一列表项之前或在最后一个列表项之后打印一些东西,可以使用 items
指令,但列表项不能为空。
假设 users
包含 ['Joe', 'Kate', 'Fred']
序列:
<#list users>
<#items as user>
- ${user}
输出为:
- Joe
- Kate
- Fred
如果没有迭代项,那么上面的代码不会输出任何内容,即
也不会输出。
有 items
的 list
指令也可以有 else
指令:
<#list users>
<#items as user>
- ${user}
<#else>
No users
更多细节:
list
可以有多个items
指令, 但是只会执行一个,多个items
可以放在不同的if
-else
分支中执行。items
下不可以用上面说的else
指令,但是list
下可以有。
sep 指令
sep
从 FreeMarker 2.3.23
版本开始存在。
sep
是编写 <#if item?has_next>...
的方便形式,有后续循环变量时执行。
当需要显示每两项之间的内容时,可以使用 sep
。例如:
假设 users
包含 ['Joe', 'Kate', 'Fred']
序列:
<#list users as user>${user}<#sep>,
输出结果为
Joe, Kate, Fred
上面的 <#sep>,
是 <#sep>,
的简写; 如果它在被包含的指令关闭的位置时,sep
结束标签可以忽略。下面的示例中,就不能使用该简写 (HTML标签不会结束任何代码,它们只是 FreeMarker 输出的原生文本):
<#list users as user>
${user}<#sep>,
break 指令
可以使用 break
指令在迭代的任意点退出。例如:
<#list 1..10 as x>
${x}
<#if x == 3>
<#break>
1
2
3