Freemaker模板指令

忘塵天外天發表於2018-04-13

${...}:Freemaker將會輸出真實的值來替換大括號內的表示式。這樣的表示式被稱為interpolation(插值)。

FTL標籤(Freemaker模板的語言標籤):FTL標籤和HTML標籤有一些相似之處,但他們是Freemaker的指令,不會在輸出中列印的。這些標籤的名字以#開頭。(使用者自定義的FTL標籤可以使用@來代替#)。

註釋:註釋和HTML的註釋相似,他們使用<#--  和 --> 來標識。不同於HTML註釋,FTL註釋不會出現在輸出中,因為Freemaker會跳過它們。

FTL標籤頁稱為指令。這些指令在HTML的標籤和HTML元素中的關係是相同的。

if指令:判斷語句,可以有條件的跳過模板的一些片段。<#if  condition></#if>,condition的使用:==是用來判斷它兩側的值是否相等的操作符,比較的結果是布林值,也就是true和false。!=就是“不等於”,使用<#else>標籤可以指定當條件為false時程式執行的內容。還有<#elseif>完善,

<#if condition >

  something

<#elseif condition>

  something

<#else>

  something

</#if>

二、list指令

當需要列表顯示內容時,list指令是必須的。它的一般格式為:<#list sequence  as  loopVariable>repeatThis</#list> 。repeatThis部分將會在給定的sequence遍歷時在每一項中重複,從第一項開始,一個接著一個。在所有的重複中,loopVariable將持有當前遍歷項的值。這個變數僅存在於<#list...></#list>標籤內。sequence可以是任意表示式,如果sequence中沒有子項,可以使用items指令,避免空的標籤輸出,另外分隔符<#sep>.

<#list misc.fruits><ul><#items as fruit><li>  ${fruit}<#sep>, </li></#items></ul></#list>

或者 <p>Fruits:${fruits?join(",","None")}

三、include指令

使用include指令,可以在模板中插入其它檔案的內容。另外重要的程式碼片段的一個更有利的方式使用巨集,是比引入檔案更為高階的方式。

使用內建函式:內建函式很像子變數或是java中的方法,它們並不是資料模型中的東西,是Freemaker在數值上新增的。為了清晰子變數是哪部分,使用?代替。來訪問

user?html 給出user的HTML轉移版本,比如&會由&amp;來代替。

user?upper_case給出user值的大寫版本

user?cap_first給出user的首字母大寫版本

user?length給出user值中字元數量,空格也會計算在內

user?size給出user序列中專案的個數。

user?index給出在user中基於0開始的user的索引值。

user?counter也像index,但是給出的是基於1的索引值

user?item_parity基於當前計數的奇偶性,給出字串odd或是even,在給不同行著色時比較有用

一些內建函式需要引數來指定行為:

user.protected?string("Y","N")基於user.protected的布林值來返回字串“Y”或“N”

user?item_cycle(‘lightRow’,‘darkRow’)是上面介紹的item_parity更為常用的變體形式。

user?join(“,”)通過連線所有項,將列表轉換為字串,在每個項之間插入引數分隔符

user?starts_with(“J”)根據user值的首字母是否是“J”返回布林值true或false

內建函式應用可以鏈式操作,user?upper_case?html

處理不存在的變數

資料模型中經常會有可選的變數(也就是有時不存在)。Freemaker不允許引用不存在的變數,除非明確的告訴他當變數不存在時如何處理。不論在哪裡引用變數,都可以指定一個預設值來避免變數丟失這種情況,通過在變數名後面跟一個!和預設值。當變數值為空或不存在時,使用預設值。

${user!'Visitor'}

也可以在變數名後面通過跟著??來詢問一個變數是否存在。將它和if指令合併

其他指令:

break指令在迭代的任意點退出。

<#if  x== 3><#break></#if>

Alphabetical  index指令對指令名可以使用駝峰形式來代替全小寫形式。

 

相關文章