Freemarker Loop 写表

Freemarker Loop to write tables

这是用于电子邮件编码。 在我看来很简单,但是我已经将一组数据分配给了一个freemarker变量

[#assign LOOP_TAB]${list.creative!'000000'}[/#assign]

其中 list.creative 包含 1-5

然后我想将相应数量的简单 HTML 表写入我的模板

 <!--Begin TEXT BOX-->
                    [#list 0..LOOP_TAB?length-1 as i]
                      <table width="100%" border="0" cellspacing="0" cellpadding="0">
                        <tbody>
                          <tr>
                            <td align="left" valign="top" style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; line-height: 20px; color: #000000;"><br>Loop Table Structure.<br><br></td>
                          </tr>
                        </tbody>
                      </table>[/#list]

它有点工作,但默认情况下我得到两个表,当我测试 2、4 或 1 时从来没有正确数量的表

让我将 LOOP_TAB 重命名为 numberOfTabs。所以,如果这是一个数字,而不是一个字符串,那么:

[#list 1 ..< numberOfTabs!0 as _]
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    ...
  </table>
[/#list]

如果 numberOfTabs 是一个字符串,并且您无法修复数据模型,则使用 (numberOfTabs?number)!0 而不是 numberOfTabs!0

一些进一步的说明:

  • [#assign LOOP_TAB]${list.creative!'000000'}[/#assign]可以简单写成[#assign LOOP_TAB = list.creative!'000000']。但正如您所见,您根本不需要这个。
  • ?length 给出字符串的字符长度,因此,它返回了 LOOP_TABS.
  • 中字符串的长度
  • from .. to 给出一个包含范围,此外 0 .. -1 将给出 [0, -1],而不是你想要的空序列。所以你需要from ..< to,它有排他性的结束。
  • 我使用 _ 作为循环变量只是为了表示您实际上并没有在任何地方阅读它。其他没什么特别的。