revel使用Go官方的模板庫。它會(huì)在兩個(gè)目錄查找模板文件:
1、應(yīng)用的`views`目錄以及它的所有子目錄
2、revel庫自己的`templates`目錄
revel為錯(cuò)誤頁面提供了模板(在`dev`開發(fā)模式下,編譯錯(cuò)誤會(huì)更友好的顯示),但是,如果用相同的名字創(chuàng)建一個(gè)模板,revel則會(huì)優(yōu)先使用自己開發(fā)的模板。如 `app/views/errors/500.html`
##渲染內(nèi)容
revel使用`RenderArgs`數(shù)據(jù)map來執(zhí)行模板。除了從應(yīng)用提供數(shù)據(jù),revel也提供了:
1、“errors”, 從`Validation.ErrorMap`返回的錯(cuò)誤信息
2、“flash”, 上一個(gè)請求攜帶的flash信息
##模板函數(shù)
Go本身為模板提供了一些函數(shù)方便我們使用。revel也添加了一些實(shí)用的函數(shù):
**eq**
類似`a == b`的條件判斷:
**set**
在當(dāng)前作用域設(shè)置一個(gè)變量:
{{set . "title" "Basic Chat room"}}
{{.title}}
**append**
將一個(gè)給定的值添加至數(shù)組/切片,如果數(shù)組/切片不存在,則新建一個(gè)。
{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
{{range .moreStyles}}
{{end}}
**field**
對Input表單字段進(jìn)行操作。
給定一個(gè)字段名稱,它將返回一個(gè)包含下列成員的struct:
`Id`: 字段名,會(huì)轉(zhuǎn)換為恰當(dāng)?shù)腵HTML id`元素
`Name`: 字段名
`Value`: `RenderArgs`中當(dāng)前字段的值
`Flash`: 當(dāng)前字段的flash信息
`Error`: 任何一個(gè)與當(dāng)前字段有關(guān)的錯(cuò)誤信息
`ErrorClass`: `hasError`的原始信息,如果不存在則為空字符串
{{with $field := field "booking.CheckInDate" .}}
Check In Date:
* {{$field.Error}}
{{end}}
**option**
結(jié)合`field`模板函數(shù)生成`HTML option`元素
{{with $field := field "booking.Beds" .}}
{{end}}
**radio**
結(jié)合`field`模板函數(shù)生成`HTML radio`元素
{{with $field := field "booking.Smoking" .}}
{{radio $field "true"}} Smoking
{{radio $field "false"}} Non smoking
{{end}}
**nl2br**
生成HTML的換行標(biāo)簽
You said:
**pluralize**
轉(zhuǎn)換單詞的復(fù)數(shù)形式
There are {{.numComments}} comment{{pluralize (len comments) "" "s"}}
**Including**
Go允許將一個(gè)模板嵌入至另一個(gè)模板
{{template "header.html" .}}
有兩點(diǎn)需要注意:
1、路徑必須是`app/views`的相對路徑
2、任何被嵌入的模板必須位于`app/views`目錄的根位置(這個(gè)限制希望是暫時(shí)的)
**Tips**
revel的示例程序說明了如何有效的使用模板,請?zhí)貏e留意這兩個(gè)示例:
*revel/samples/booking/app/views/header.html*
*revel/samples/booking/app/views/header.html*
它利用模板函數(shù)設(shè)置模板自己的html header和樣式:
{{.title}}
{{range .moreStyles}}
{{end}}
{{range .moreScripts}}
{{end}}
引用html header模板:
{{set . title "Hotels"}}
{{append . "moreStyles" "ui-lightness/jquery-ui-1.7.2.custom.css"}}
{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
{{template "header.html" .}}
##自定義模板函數(shù)
revel應(yīng)用可以注冊自定義模板函數(shù):
func init() {
revel.TemplateFuncs["eq"] = func(a, b interface{}) bool { return a == b }
}