乐趣区

关于golang:基础配置篇扩展模板引擎功能给模板引擎添加自定义函数

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 一份来在下面做批改。

退出移动版