beego 视图模板

beego 的视图(view)模板引擎是基于 Go 原生的模板库(html/template)进行开发的,因此在开始编写 view 模板代码之前需要先学习下 Go 内置模板引擎的语法。

beego 模板,默认支持 tpl 和 html 的后缀名。

如果你还不了解 Go 内置模板引擎(html/template)的模板语法,可以参考 Go 内置模板引擎教程

 

1. 基本例子

下面看个视图模板的例子。
模板文件: views/user/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户个人信息:</h1>
<p>
    {{ if ne .user nil}}
        用户名: {{.user.Username}} <br/>
        注册时间: {{.user.InitTime}}
    {{else}}
        用户不存在!
    {{end}}}
</p>
</body>
</html>

下面看控制器如何渲染这个模板文件。

// 处理get请求
func (this *UserController) Get() {
    // 初始化,模板渲染需要的数据
	user := &User{1, "codebaoku", time.Now()}
	
	// 通过Data, 将参数传入模板,  Data是map类型支持任意类型数据
	this.Data["user"] = user
	
	// 设置我们要渲染的模板路径, 也就是views目录下面的相对路径
	// 如果你不设置TplName,那么beego就按照 <控制器名字>/<方法名>.tpl 这种格式去查找模板文件。
	this.TplName = "user/index.html"
	
	// 如果你关闭了自动渲染,则需要手动调用渲染函数, beego 默认是开启自动渲染的
	// this.Render()
}

在app.conf配置文件中,可以配置AutoRender参数为true或者false,表示是否开启自动渲染。

 

2. 模板标签冲突

默认情况,模板引擎使用 {{ 模板表达式 }} 作为模板标签,如果我们前端开发使用的是Vue、angular之类的框架,这些前端框架也是使用 {{ 模板表达式 }} 作为模板标签,这样就造成冲突了。

我们可以通过修改Go模板引擎的默认标签解决模板标签冲突问题。

例子:

// 修改Go的模板标签
web.TemplateLeft = "<<<"
web.TemplateRight = ">>>"

修改后的模板表达式:

<<<.user.username>>>

我们可以改成自己喜欢的样式。

本文介绍 beego 默认新增的模板函数,Go 内置模板引擎也自带了一些模板函数。1. beego 内置模板函数:dateformat 实现了时间的格式化,返回字符串 {{dateformat .Time "2006-01-02T15:04:05Z07:00"}}。2. 自定义模板函数:除了使用 beego 提供的默认模板函数,我们也可以定义新的模板函数。