Freemaker指令总结

<#assign a=3>

一:if指令: 
<#if condition> 
<#elseif condition2> 
<#elseif condition3> 
<#else> 
</#if> 

应用举例:

<#assign a=3>
<#if a>3>
a是一个大于3的数
<#elseif a=3>
a=3
<#else>
a是一个小于3的数
</#if>
 

 
二:switch 
<#switch value
<#case refValue1><#break> 
<#case refValue2><#break> 
<#case refValueN><#break> 
<#default></#switch> 

 
三:list,break 
<#list sequence as item
 
</#list> 
两个特殊的循环变量: 
item_index: 当前变量的索引值。 
item_has_next: 是否存在下一个对象。 
可以用<#break/>指令离开loop循环。 
四:include指令 
<#include filename>或者 
<#include filenameoptions>
 
filename
: 表达式转换为字符串 
optionsencoding=encodingparse=parse encoding: 表达式转换为字符串 
parse: 表达式转换为逻辑值,是否作为ftl文件解析。 
<#include "/common/navbar.html" parse=false encoding="Shift_JIS"> 
<#include "*/footer.ftl">表示当前目录下以及所有父目录下的文件。如果当前模版在/foo/bar/template.ftl ,那么查找footer.ftl的顺序为:/foo/bar/footer.ftl 
/foo/footer.ftl/footer.ftl这种方式讲允许设计者将通用的模版放在父文件夹里面。 
也可以只指定部分路径:<#include "*/commons/footer.ftl"> 
五:import指令<#import path as hash
六:noparse 
<#noparse> 
 
</#noparse> 
七:compress 
<#compress> 
 
</#compress> 
八:escape,noescape 
<#escape identifier as expression
 
<#noescape>…</#noescape> 
 
</#escape> 
escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。

 

===========================

除了相关的文本外,在FreeMarker模板中可以包括下面三种特定部分:

  1. ${…}:称为插补(interpolations),FreeMarker会在输出时用实际值进行替代。
  2. 指令:也叫FreeMarker标记,与HTML标记类似,但用#开始(有些以@开始,在后面叙述)。
  3. 注释:包含在<#– 和 –>(而不是<!–和–>)之间文本。
控制指令
if指令

if指令与大部分程式语言一样,也支持<#else if..>,不再赘述。

<#if animals.python.price < animals.elephant.price>   Pythons are cheaper than elephants today.<#else>   Pythons are not cheaper than elephants today.</#if>
list指令

list指令将遍历Sequences里的每一个元素。list指令有两个隐含的特殊变量:

  1. item_index 该变量将返回元素在Sequences里的索引值。
  2. item_has_next 该变量是boolean型,false表明该元素是Sequences里的最后一个元素。
<p>We have these animals:<table border=1>   <tr><th>Id<th>Name<th>Price   <#list animals as being>   <tr><td>${being_index+1}<td>${being.name}<td>${being.price} Euros   </#list></table>

上面的模板可以依次列印出三种动物的名字和价格,being_index和being_has_next则是它的特殊变量。

可以用<#break>指令提前结束list循环。

switch指令

与其他语言的switch语句类似。

<#switch being.size>   <#case "small">      This will be processed if it is small      <#break>   <#case "medium">      This will be processed if it is medium      <#break>   <#case "large">      This will be processed if it is large      <#break>   <#default>      This will be processed if it is neither</#switch>

<#escape x as x?html>

First name: ${firstName}

Last name: ${lastName}

Maiden name: ${maidenName}</#escape>

等同于:

First name: ${firstName?html}

Last name: ${lastName?html}

Maiden name: ${maidenName?html}

escape指令在解析模版时起作用,而不是运行时起作用。

escape指令还能嵌套使用,子继承父的escape规则。

<#escape x as x?html>

Customer Name: ${customerName}

Items to ship:

<#escape x as itemCodeToNameMap[x]>

${itemCode1}

${itemCode2}

${itemCode3}

${itemCode4}

</#escape></#escape>

等同于:
Customer Name: ${customerName?html}

Items to ship:

${itemCodeToNameMap[itemCode1]?html}

${itemCodeToNameMap[itemCode2]?html}

${itemCodeToNameMap[itemCode3]?html}

${itemCodeToNameMap[itemCode4]?html}

九:assign指令

<#assign name=value>
or
<#assign name1=value1name2=value2... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>   capture this
</#assign>
or
<#assign name in namespacehash>   capture this
</#assign>创建或者替换一个已经存在的变量,只能作用于顶层变量。
不好的做法:<#assign x>Hello ${user}!</#assign>更改为:<#assign x="Hello ${user}!">

十:global指令

<#global name=value>

or

<#global name1=value1name2=value2... nameN=valueN>or<#global name>

capture this

</#global>

十一:local指令

<#local name=value>

or

<#local name1=value1name2=value2... nameN=valueN>or<#local name只能用于macro的定义body中。

capture this

</#local>

十二:setting指令:

<#setting name=value>

name的取值范围:

local:number_format:

boolean_format:缺省值为"true,false"

date_format, time_formatdatetime_format

time_zone:
url_escaping_charset

classic_compatible

十三:用户自定义指令

<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...>    ...
</@macro_or_transf>

<@macro_or_transf...>    ...
</@><@macro_or_transfval1, val2, ..., valN/>

十四:macro,nested,return

<#macro nameparam1param2… paramN>

<#nested loopvar1loopvar2loopvarN>

<#return>

</#macro>

十五:function, return

<#function nameparam1param2… paramN>

 <#return returnValue>

</#function>

<#function avg x y>

<#return (x + y) / 2>

</#function>

${avg(10, 20)}

十六:flush

<#flush>

十七:stop

<#stop>

or

<#stop reason>取消处理模版。

十八:ftl指令

<#ftl param1=value1param2=value2paramN=valueN>

ftl指令必须放在ftl文件的最上面。

参数范围:

encoding:

strip_whitespace

strip_text

strict_syntax

十九:t, lt, rt

二十:attempt, recover

<#attempt>

attempt block<#recover>

recover block

</#attempt>

<#attempt>

Optional content: ${thisMayFails}

<#recover>

Ops! The optional content is not available.

</#attempt>

<#escape x as x?html>

First name: ${firstName}

Last name: ${lastName}

Maiden name: ${maidenName}</#escape>

等同于:

First name: ${firstName?html}

Last name: ${lastName?html}

Maiden name: ${maidenName?html}

escape指令在解析模版时起作用,而不是运行时起作用。

escape指令还能嵌套使用,子继承父的escape规则。

<#escape x as x?html>

Customer Name: ${customerName}

Items to ship:

<#escape x as itemCodeToNameMap[x]>

${itemCode1}

${itemCode2}

${itemCode3}

${itemCode4}

</#escape></#escape>

等同于:
Customer Name: ${customerName?html}

Items to ship:

${itemCodeToNameMap[itemCode1]?html}

${itemCodeToNameMap[itemCode2]?html}

${itemCodeToNameMap[itemCode3]?html}

${itemCodeToNameMap[itemCode4]?html}

九:assign指令

<#assign name=value>
or
<#assign name1=value1name2=value2... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>
  capture this
</#assign>
or
<#assign name in namespacehash>
  capture this
</#assign>创建或者替换一个已经存在的变量,只能作用于顶层变量。
不好的做法:<#assign x>Hello ${user}!</#assign>更改为:<#assign x="Hello ${user}!">

十:global指令

<#global name=value>

or

<#global name1=value1name2=value2... nameN=valueN>or<#global name>

capture this

</#global>

十一:local指令

<#local name=value>

or

<#local name1=value1name2=value2... nameN=valueN>or<#local name只能用于macro的定义body中。

capture this

</#local>

十二:setting指令:

<#setting name=value>

name的取值范围:

local:number_format:

boolean_format:缺省值为"true,false"

date_format, time_formatdatetime_format

time_zone:
url_escaping_charset

classic_compatible

十三:用户自定义指令

<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...>
  ...
</@macro_or_transf>

<@macro_or_transf...>
  ...
</@><@macro_or_transfval1, val2, ..., valN/>

十四:macro,nested,return

<#macro nameparam1param2… paramN>

<#nested loopvar1loopvar2loopvarN>

<#return>

</#macro>

十五:function, return

<#function nameparam1param2… paramN>

 <#return returnValue>

</#function>

<#function avg x y>

<#return (x + y) / 2>

</#function>

${avg(10, 20)}

十六:flush

<#flush>

十七:stop

<#stop>

or

<#stop reason>取消处理模版。

十八:ftl指令

<#ftl param1=value1param2=value2paramN=valueN>

ftl指令必须放在ftl文件的最上面。

参数范围:

encoding:

strip_whitespace

strip_text

strict_syntax

十九:t, lt, rt

二十:attempt, recover

<#attempt>

attempt block<#recover>

recover block

</#attempt>

<#attempt>

Optional content: ${thisMayFails}

<#recover>

Ops! The optional content is not available.

</#attempt>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值