上一页下一页
模板列表
页面内容
最简单的模板通常是纯 HTML 文件(或任何其他文本文件;FreeMarker 本身不是 HTML)。 当客户端访问某个页面时,FreeMarker需要将HTML代码发送到客户端浏览器进行显示。 如果你想移动页面(这里指的是动态网页技术,译者注),那么你需要在HTML中放置一段可以被FreeMarker解析的特殊代码片段:
任何不是 FTL 标签、插值或注释的内容都将被视为静态文本,FreeMarker 不会对其进行解析; 它将按原样输出。
FTL 标签也称为指令。 该指令在 HTML 标签(例如: 和 )和 HTML 元素(例如: table 元素)中的关系是相同的。 (如果你现在感觉不到区别,只需将“FTL 标签”和“指令”视为同义词即可。)
笔记:
您可以轻松地尝试编译模板
基本说明
这里我们只是看一些特别常用的指令,其实(指令有很多)。
如果指令
可以使用 if 指令有条件地跳过模板的各个部分。 例如,假设在 中,您想对您的老板 Big Joe 说非常感谢,但其他人都不一样:
Welcome! Welcome ${user}, our beloved leader!
Our latest product: ${latestProduct.name}!
此时网站模板文件的名字,告诉FreeMarker,当与“BigJoe”相同时,“我们敬爱的领导者”(我们敬爱的领导者网站模板文件的名字,译者注)是if条件中用户变量的唯一值。 一般来说,如果条件为假(布尔值),则 和 标签之间的内容将被跳过。
下面详细说一下条件的使用:==是一个运算符,用来判断两边的值是否相等。 比较的结果是一个布尔值,即 true 或 false。 ==两边,是的,这个句子结构我们很熟悉; 最终它将被变量的值替换。 一般来说,指令或注册中没有用逗号标记的任何内容都被视为对变量的引用。 两边都是指定的字符串,模板中的字符串只能放在逗号内。
当价格为 0 时,“Pythonsarefreetoday!” 将被复制:
<#if animals.python.price == 0> Pythons are free today!
与前面的示例一样,直接指定了字符串,但这里直接指定了数字(0)。 请注意,此处的数字没有用逗号括起来。 如果你把(“0”)放在逗号里,那么FreeMarker就会误判它是一个字符串(即字符串0,译者注)。
当价格不为0时,会打印“Pythonsarenotfreetoday!”:
<#if animals.python.price != 0> Pythons are not free today!
您可能还推测 != 是“不等于”。
同时,你也可以这样编写代码(使用):
<#if animals.python.price < animals.elephant.price> Pythons are cheaper than elephants today.
使用标签来指定当条件为假时程序应该做什么。 例如:
<#if animals.python.price Pythons are cheaper than elephants today. Pythons are not cheaper than elephants today.
在此示例中,如果蜥蜴的成本低于大象,则程序将打印“Pythonsarecheaperthanelephantstoday”。 否则“今天的蟒蛇可不比大象便宜。” 被复制。 您还可以使用 elseif 预先构建它:
<#if animals.python.price Pythons are cheaper than elephants today. <#elseif animals.elephant.price Elephants are cheaper than pythons today. Elephants and pythons cost the same today.
如果变量本身是布尔值(true/false),可以直接用它作为if的条件(判断条件,译者注):
Pythons are protected animals!
列表命令
当需要以列表方式显示内容时,就需要使用list命令。 例如:如果您将此模板合并到:
We have these animals:
${animal.name} | ${animal.price} Euros |
那么输出将是这样的:
We have these animals:
mouse | 50 Euros |
elephant | 5000 Euros |
python | 4999 Euros |
列表命令的常用格式是:repeatThis。 将为给定序列传递中的每个项目重复此部分,从第一个项目开始,一个接着一个。 在所有迭代中,loopVariable 将保存当前迭代项的值。 该变量仅存在于 和 标签内。
序列可以是任何表达式,例如,我们可以列出样本数据模型中的蔬菜,如下所示:
- ${fruit}
您应该熟悉这样的表达:misc.fruits; 它。
内部示例的一个问题是,如果我们有 0 种蔬菜,它仍然会输出一个空的蔬菜,而不是什么也没有输出。 为了防止这种情况,您可以使用如下列表:
- ${fruit}
此时,list 命令将列表视为一个整体,而 items 命令中的部分将为每个 kiwi 重复。 如果我们有 0 种蔬菜,那么列表中的所有内容都会被跳过,因此不会有 ul 标签。
与列表相关的另一个常见任务:使用一些分隔符(例如冒号)枚举奇异果:
Fruits: ${fruit},
Fruits: orange, banana
sep 覆盖的部分(我们也可以这样写:...,)只有在有下一项时才会被执行。 因此,最后一个香蕉之前不会有冒号。
再次回到这个话题,如果我们有0种蔬菜怎么办? 仅仅复制“Fruits:”并不算不方便。 list 命令和 if 命令一样,可以有 else 部分,如果列表中有 0 个元素,则执行 else 部分:
Fruits: ${fruit}, None
笔记:
事实上,这个简单的示例可以这样编写,并且它使用了本主题中未涵盖的语言功能:
Fruits: ${fruits?join(", ", "None")}
所有此类指令(list、items、sep、else)都可以组合使用:
Fruits:
- ${fruit} and
We have no fruits.
笔记:
有关这些命令的更多信息可以在命令参考中找到。
包含指令
使用include指令,我们可以在模板中插入其他文件的内容。