Go Revel - Templates(模板)
revel使用Go官方的模板库。它会在两个目录查找模板文件:
1、应用的views
目录以及它的所有子目录
2、revel库自己的templates
目录
revel为错误页面提供了模板(在dev
开发模式下,编译错误会更友好的显示),但是,如果用相同的名字创建一个模板,revel则会优先使用自己开发的模板。如 app/views/errors/500.html
渲染内容
revel使用RenderArgs
数据map来执行模板。除了从应用提供数据,revel也提供了:
1、“errors”, 从Validation.ErrorMap
返回的错误信息
2、“flash”, 上一个请求携带的flash信息
模板函数
Go本身为模板提供了一些函数方便我们使用。revel也添加了一些实用的函数:
eq
类似a == b
的条件判断:
<div class="message {{if eq .User " you"}}you{{end}}"="">
set
在当前作用域设置一个变量:
{{set . "title" "Basic Chat room"}}
<h1>{{.title}}</h1>
append
将一个给定的值添加至数组/切片,如果数组/切片不存在,则新建一个。
{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
{{range .moreStyles}}
{{end}}
field
对Input表单字段进行操作。
给定一个字段名称,它将返回一个包含下列成员的struct:
Id
: 字段名,会转换为恰当的HTML id
元素
Name
: 字段名
Value
: RenderArgs
中当前字段的值
Flash
: 当前字段的flash信息
Error
: 任何一个与当前字段有关的错误信息
ErrorClass
: hasError
的原始信息,如果不存在则为空字符串
{{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}}
option
结合field
模板函数生成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}}
radio
结合field
模板函数生成HTML radio
元素
{{with $field := field "booking.Smoking" .}}
{{radio $field "true"}} Smoking
{{radio $field "false"}} Non smoking
{{end}}
nl2br
生成HTML的换行标签
You said:
<div class="comment">{{nl2br .commentText}}</div>
pluralize
转换单词的复数形式
There are {{.numComments}} comment{{pluralize (len comments) "" "s"}}
Including
Go允许将一个模板嵌入至另一个模板
{{template "header.html" .}}
有两点需要注意:
1、路径必须是app/views
的相对路径
2、任何被嵌入的模板必须位于app/views
目录的根位置(这个限制希望是暂时的)
Tips
revel的示例程序说明了如何有效的使用模板,请特别留意这两个示例:
revel/samples/booking/app/views/header.html
revel/samples/booking/app/views/header.html
它利用模板函数设置模板自己的html header和样式:
<title>{{.title}}</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" .}}
自定义模板函数
revel应用可以注册自定义模板函数:
func init() {
revel.TemplateFuncs["eq"] = func(a, b interface{}) bool { return a == b }
}</div>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述