FreeMarker学习之List 列表指令 及 list, else, items, sep, break 指令

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 指令

itemsFreeMarker 2.3.23 版本开始存在

当需要在第一列表项之前或在最后一个列表项之后打印一些东西,可以使用 items 指令,但列表项不能为空。
假设 users 包含 ['Joe', 'Kate', 'Fred'] 序列:

<#list users>
  
    <#items as user>
  • ${user}

输出为:

  • Joe
  • Kate
  • Fred

如果没有迭代项,那么上面的代码不会输出任何内容,即

    也不会输出。

    itemslist 指令也可以有 else 指令:

    <#list users>
      
      <#items as user>
    • ${user}
    <#else>

    No users

    更多细节:

    • list 可以有多个 items 指令, 但是只会执行一个,多个 items 可以放在不同的 if-else 分支中执行。

    • items 下不可以用上面说的 else 指令,但是 list 下可以有。

    sep 指令

    sepFreeMarker 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
    

    你可能感兴趣的:(FreeMarker学习之List 列表指令 及 list, else, items, sep, break 指令)