共计 1919 个字符,预计需要花费 5 分钟才能阅读完成。
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 一份来在下面做批改。