iris 内置的模板引擎语言和标签,默认是不反对应用 golang 的函数的。但有时候,咱们又须要在模板中解决一些变量。这个时候咱们就须要手动给模板引擎增加自定义函数了。给模板引擎增加自定义函数的办法很简略,先是写好函数,而后将函数增加到模板引擎就能够了。
上面咱们以给模板增加一个工夫格式化函数为例,阐明给模板引擎增加函数的办法。咱们先在 bootstrap.go 中,增加上面的办法:
func TimestampToDate(in int64, layout string) string {t := time.Unix(in, 0)
return t.Format(layout)
}
这个函数的意思就是承受一个工夫戳,和一个格式化模板,格式化模板采纳 golang 的工夫格式化模板。而后依据传入的工夫戳,格式化成传入的工夫格式化模板的样子输入。
而后将它增加到模板引擎中。咱们在 Serv 函数的模板引擎局部代码中退出:
func (bootstrap *Bootstrap) Serve() {bootstrap.Application.Logger().SetLevel(bootstrap.LoggerLevel)
bootstrap.LoadRoutes()
pugEngine := iris.Django("./template", ".html")
if config.ServerConfig.Env == "development" {
// 测试环境下动静加载
pugEngine.Reload(true)
}
// 这一行是新加的代码
pugEngine.AddFunc("stampToDate", TimestampToDate)
bootstrap.Application.RegisterView(pugEngine)
bootstrap.Application.Run(iris.Addr(fmt.Sprintf("127.0.0.1:%d", bootstrap.Port)),
iris.WithoutServerError(iris.ErrServerClosed),
iris.WithoutBodyConsumptionOnUnmarshal,
)
}
这里咱们增加了一个 函数名为 stampToDate 的函数,模板调用这个函数的时候,就会对应的执行下面咱们定义的 TimestampToDate 函数。上面是咱们在模板中应用的办法:
{{stampToDate(1607336185, "2006-01-02 15:04:05")}}
这个模板代码将输入的后果为:
2020-12-07 18:16:25
为了验证后果,咱们当初将它输入在 IndexPage 中。咱们在 IndexPage 函数中增加一行代码:
func IndexPage(ctx iris.Context) {nowStamp := time.Now().Unix()
ctx.ViewData("nowStamp", nowStamp)
ctx.View("index.html")
}
而后在 index.html 文件中,搁置下面提到的模板引擎代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
Hello World!<br>
{{stampToDate(nowStamp, "2006-01-02 15:04:05")}}
</body>
</html>
仍然是从新运行代码,在浏览器中看后果:
如果不出意外,你看到的就是包含了年月日时分秒的工夫。
同样的,咱们还能够输入更多的工夫格局,比方
去掉秒
{{stampToDate(nowStamp, "2006-01-02 15:04")}}<br>
去掉时分秒
{{stampToDate(nowStamp, "2006-01-02")}}<br>
加上中文年月日时分秒
{{stampToDate(nowStamp, "2006 年 01 月 02 日 15 时 04 分 05 秒")}}<br>
格林威治工夫
{{stampToDate(nowStamp, "Mon Jan 2 15:04:05 -0700 MST 2006")}}<br>
再次刷新浏览器,查看后果。这个时候,如果后面咱们设置了动静加载模板 development,则咱们不须要重启我的项目,就能够通过刷新浏览器查看到新的改变了。因为咱们只改变了模板,它会主动在每次咱们刷新页面的时候,重载模板。
运行后果:
残缺的我的项目示例代码托管在 GitHub 上,须要查看残缺的我的项目代码能够到 github.com/fesiong/goblog 上查看,也能够间接 fork 一份来在下面做批改。