On this page
内置循环变量
Page Contents
Note:
自 FreeMarker 2.3.23 起,内置的循环变量才存在。
这些内置函数只能与列表和项目指令(以及不建议使用的foreach
指令)的循环变量一起使用。对此进行一些解释(loopVar?index
返回我们迭代通过的可列出值中的从 0 开始的索引):
<#-- Note: x is a loop variable -->
<#list ['a', 'b', 'c'] as x>
${x?index}
</#list>
0
1
2
当list
指令未指定循环变量时,这些内置函数与items
指令的循环变量一起使用:
<#list ['a', 'b', 'c']>
<ul>
<#items as x>
<li>${x?index}</li>
</#items>
</ul>
</#list>
内置的循环变量仅使用循环变量的“名称”,以便它们可以标识相关的正在进行的迭代。他们不读取循环变量的“值”。因此,这是一个解析错误:
<#list ['a', 'b', 'c'] as x>
<#assign y = x>
${y?index} <#-- ERROR: y isn't a loop variable -->
</#list>
counter
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
返回从 1 开始的索引,该索引当前处于迭代状态(由循环变量名称标识)。
<#list ['a', 'b', 'c'] as i>
${i?counter}: ${i}
</#list>
1: a
2: b
3: c
Note:
对于基于 0 的索引,请使用index built-in。
has_next
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
告知当前迭代所在的项目(由循环变量名称标识)是否不是最后一个项目。
<#list ['a', 'b', 'c'] as i>${i?has_next?c} </#list>
true true false
Note:
要用逗号等分隔项目,请使用<#sep>separator</#sep>
而不是<#if var?has_next>separator</#if>
,因为它更具可读性。 (此外,</#sep>
通常可以省略,例如<#list ... as var>...${var}...<#sep>separator</#list>
)
Note:
如果您需要此内置函数的反函数,请使用var?is_last
而不是!var?has_next
,因为它更具可读性。
index
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
返回基于 0 的索引,该索引当前处于迭代状态(由循环变量名称标识)。
<#list ['a', 'b', 'c'] as i>
${i?index}: ${i}
</#list>
0: a
1: b
2: c
Note:
对于基于 1 的索引,请使用counter built-in。
is_even_item
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
告知当前迭代(由循环变量名称标识)所在的项目是否具有基于偶数的索引。
<#list ['a', 'b', 'c', 'd'] as i>${i?is_even_item?c} </#list>
false true false true
Note:
要使表具有交替的行颜色等,请改用var?item_parity或var?item_cycle(...)。
is_first
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
告诉当前迭代(由循环变量名称标识)当前所在的项目是否是第一项。
<#list ['a', 'b', 'c'] as i>${i?is_first?c} </#list>
true false false
is_last
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
告知当前迭代所在的项目(由循环变量名称标识)是否为最后一个项目。
<#list ['a', 'b', 'c'] as i>${i?is_last?c} </#list>
false false true
Note:
如果您需要此内置函数的反函数,请使用var?has_next
而不是!var?is_last
,因为它更具可读性。
Note:
要用逗号等分隔项目,请使用<#sep>separator</#sep>
而不是<#if var?has_next>separator</#if>
,因为它更具可读性。 (此外,</#sep>
通常可以省略,例如<#list ... as var>...${var}...<#sep>separator</#list>
)
is_odd_item
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
告知当前迭代(由循环变量名称标识)所在的项目是否具有基于奇数的 1 索引。
<#list ['a', 'b', 'c', 'd'] as i>${i?is_odd_item?c} </#list>
true false true false
Note:
要使表具有交替的行颜色等,请改用var?item_parity或var?item_cycle(...)。
item_cycle
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
这是item_parity built-in的通用版本,您可以在其中指定要使用的值而不是"odd"
和"even"
。它还允许循环使用两个以上的值。
<#list ['a', 'b', 'c', 'd', 'e', 'f', 'g'] as i>
<tr class="${i?item_cycle('row1', 'row2', 'row3')}">${i}</tr>
</#list>
<tr class="row1">a</tr>
<tr class="row2">b</tr>
<tr class="row3">c</tr>
<tr class="row1">d</tr>
<tr class="row2">e</tr>
<tr class="row3">f</tr>
<tr class="row1">g</tr>
Some details:
参数的数量必须至少为 1,并且没有上限。
参数的类型可以是任何东西,而不必是字符串。
Note:
如果您需要的值是"odd"
和"even"
,请使用item_parity built-in。
item_parity
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
返回"odd"
或"even"
字符串值,具体取决于迭代(由循环变量名称标识)当前所在的基于 1 的索引的奇偶性。通常用于表行的交替颜色:
<#list ['a', 'b', 'c', 'd'] as i>
<tr class="${i?item_parity}Row">${i}</tr>
</#list>
<tr class="oddRow">a</tr>
<tr class="evenRow">b</tr>
<tr class="oddRow">c</tr>
<tr class="evenRow">d</tr>
Note:
item_parity_cap built-in用于大写的"Odd"
和"Even"
。使用item_cycle built-in指定自定义值,或者指定两个以上的值。
item_parity_cap
Note:
从 FreeMarker 2.3.23 开始,此内置功能可用。
返回"Odd"
或"Even"
字符串值(注意大小写),具体取决于迭代(由循环变量名称标识)当前所在的基于 1 的索引的奇偶性。
<#list ['a', 'b', 'c', 'd'] as i>
<tr class="row${i?item_parity_cap}">${i}</tr>
</#list>
<tr class="rowOdd">a</tr>
<tr class="rowEven">b</tr>
<tr class="rowOdd">c</tr>
<tr class="rowEven">d</tr>
Note:
item_parity built-in用于小写的"odd"
和"even"
。