Revel 使用 Go 模板, 在下面兩個(gè)目錄中查找模板:
views
目錄 (包括所有的子目錄)templates
目錄.比如有一個(gè)控制器 Hello
,方法名為 World
, Revel 會(huì)查找名字為 views/Hello/World.html
的模板。模板名字不區(qū)分大小寫(xiě),所以 views/hello/world.html
與 views/HeLlO/wOrLd.HtMl
都是匹配的模板.
Revel 提供了錯(cuò)誤頁(yè)面模板 (在開(kāi)發(fā)模式中友好的顯示編譯錯(cuò)誤), 開(kāi)發(fā)者也可以重寫(xiě)這些模板,比如app/views/errors/500.html
.
Revel 使用 RenderArgs map 渲染模板。除了開(kāi)發(fā)者傳送的數(shù)據(jù), Revel 也提供一些有用的數(shù)據(jù):
Validation.ErrorMap
Go 提供了一些 模板函數(shù)。Revel 也增加了一些模板函數(shù)。請(qǐng)閱讀下面的文檔 或 查看源代碼.
一個(gè)簡(jiǎn)單的 “a == b” 測(cè)試.
例如:
<div class="message {{if eq .User "you"}}you{{end}}">
在當(dāng)前模板上下文中設(shè)置一個(gè)變量
例如:
{{set . "title" "Basic Chat room"}}
<h1>{{.title}}</h1>
添加變量到一個(gè)數(shù)組中, 或者在模板上下文中創(chuàng)建一個(gè)數(shù)組
例如:
{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
{{range .moreStyles}}
<link rel="stylesheet" type="text/css" href="/public/{{.}}">
{{end}}
input 字段輔助函數(shù).
給出一個(gè)字段名, 函數(shù)會(huì)生成包含下面成員的結(jié)構(gòu):
例如:
{{with $field := field "booking.CheckInDate" .}}
<p class="{{$field.ErrorClass}}">
<strong>Check In Date:</strong>
<input type="text" size="10" name="{{$field.Name}}" class="datepicker" value="{{$field.Flash}}">
* <span class="error">{{$field.Error}}</span>
</p>
{{end}}
使用輔助函數(shù)生成 HTML option
字段。
例如:
{{with $field := field "booking.Beds" .}}
<select name="{{$field.Name}}">
{{option $field "1" "One king-size bed"}}
{{option $field "2" "Two double beds"}}
{{option $field "3" "Three beds"}}
</select>
{{end}}
使用輔助函數(shù)生成 HTML radio input
字段
例如:
{{with $field := field "booking.Smoking" .}}
{{radio $field "true"}} Smoking
{{radio $field "false"}} Non smoking
{{end}}
將換行符轉(zhuǎn)換成 HTML 的 break.
例如:
You said:
<div class="comment">{{nl2br .commentText}}</div>
一個(gè)輔助的復(fù)數(shù)函數(shù)
例如:
There are {{.numComments}} comment{{pluralize (len comments) "" "s"}}
輸出原生的、未轉(zhuǎn)義的文本
例如:
<div class="body">{{raw .blogBody}}</div>
Go 模板允許你在模板中包含其他模板,比如:
{{template "header.html" .}}
注意: * 相對(duì)路徑是 app/views
Revel 應(yīng)用程序有效利用 Go 模板,請(qǐng)看看下面的例子:
revel/samples/booking/app/views/header.html
revel/samples/booking/app/views/Hotels/Book.html
使用輔助函數(shù),為模板設(shè)置標(biāo)題和額外的樣式。
例如:
<html>
<head>
<title>{{.title}}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" media="screen" href="/public/css/main.css">
<link rel="shortcut icon" type="image/png" href="/public/img/favicon.png">
{{range .moreStyles}}
<link rel="stylesheet" type="text/css" href="/public/{{.}}">
{{end}}
<script src="http://atts.w3cschool.cn/attachments/image/cimg/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
<script src="http://atts.w3cschool.cn/attachments/image/cimg/script>
{{range .moreScripts}}
<script src="http://atts.w3cschool.cn/attachments/image/cimg/{{.}}" type="text/javascript" charset="utf-8"></script>
{{end}}
</head>
在模板中這樣使用:
{{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" .}}
應(yīng)用程序可以注冊(cè)自定義模板函數(shù)
例如:
func init() {
revel.TemplateFuncs["eq"] = func(a, b interface{}) bool { return a == b }
}
更多建議: