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

list指令

使用方法举例
假设 users 包含 ['Joe', 'Kate', 'Fred'] 序列:

<#list users as user>
  <p>${user}
</#list>

输出结果为:

  <p>Joe
  <p>Kate
  <p>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>,</#if>
<#list>

输出结果为:

1.winter,
2.spring,
3.summer,
4.autumn

else 指令

list 中的 else 仅从 FreeMarker 2.3.23 版本开始支持。

当没有迭代项时,才使用 else 指令:

<#list users as user>
  <p>${user}
<#else>
  <p>No users
</#list>

users 包含0项时,输出为:

<p>No users

items 指令

itemsFreeMarker 2.3.23 版本开始存在

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

<#list users>
  <ul>
    <#items as user>
      <li>${user}</li>
    </#items>
  </ul>
</#list>

输出为:

<ul>
      <li>Joe</li>
      <li>Kate</li>
      <li>Fred</li>
</ul>

如果没有迭代项,那么上面的代码不会输出任何内容,即 <ul></ul> 也不会输出。

itemslist 指令也可以有 else 指令:

<#list users>
  <ul>
    <#items as user>
      <li>${user}</li>
    </#items>
  </ul>
<#else>
  <p>No users
</#list></pre>

更多细节:

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

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

sep 指令

sepFreeMarker 2.3.23 版本开始存在。
sep 是编写 <#if item?has_next>...</#if> 的方便形式,有后续循环变量时执行。

当需要显示每两项之间的内容时,可以使用 sep。例如:
假设 users 包含 ['Joe', 'Kate', 'Fred'] 序列:

<#list users as user>${user}<#sep>, </#list>

输出结果为

Joe, Kate, Fred

上面的 <#sep>, </#list><#sep>, </#sep></#list> 的简写; 如果它在被包含的指令关闭的位置时,sep 结束标签可以忽略。下面的示例中,就不能使用该简写 (HTML标签不会结束任何代码,它们只是 FreeMarker 输出的原生文本):

<#list users as user>
  <div>
    ${user}<#sep>, </#sep>
  </div>
</#list>

break 指令

可以使用 break 指令在迭代的任意点退出。例如:

<#list 1..10 as x>
  ${x}
  <#if x == 3>
    <#break>
  </#if>
</#list>
  1
  2
  3

猜你喜欢

转载自blog.csdn.net/weixin_34391445/article/details/87517703