template

template 中间件为 Flame 实例提供基于 Go 模板引擎在新窗口打开的 HTML 渲染服务。

你可以在 GitHub在新窗口打开 上阅读该中间件的源码或通过 pkg.go.dev在新窗口打开 查看 API 文档。

下载安装

Go 语言的最低版本要求为 1.16

go get github.com/flamego/template

用法示例

提示

本小结仅展示 template 中间件的相关用法,如需了解模板引擎的用法请移步 html/template在新窗口打开 的文档。

template.Templater在新窗口打开 可以配合 template.Options在新窗口打开 对中间件进行配置。

默认情况下,模板文件都需要被存放在 "templates" 目录内,并以 .html.tmpl 作为文件名后缀。template.Data在新窗口打开 是用于渲染模板的数据容器,即根对象。

使用本地文件

package main

import (
	"net/http"

	"github.com/flamego/flamego"
	"github.com/flamego/template"
)

func main() {
	f := flamego.Classic()
	f.Use(template.Templater())

	type Book struct {
		Name   string
		Author string
	}
	f.Get("/", func(t template.Template, data template.Data) {
		data["Name"] = "Joe"
		data["Books"] = []*Book{
			{
				Name:   "Designing Data-Intensive Applications",
				Author: "Martin Kleppmann",
			},
			{
				Name:   "Shape Up",
				Author: "Basecamp",
			},
		}
		t.HTML(http.StatusOK, "home")
	})
	f.Run()
}
<p>
  Hello, <b>{{.Name}}</b>!
</p>
<p>
  Books to read:
  <ul>
    {{range .Books}}
      <li><i>{{.Name}}</i> by {{.Author}}</li>
    {{end}}
  </ul>
</p>

使用 embed.FS

template.EmbedFS在新窗口打开 是用于将 embed.FS 转换为 template.FileSystem在新窗口打开 的辅助函数。

$ tree .
.
├── templates
│   ├── embed.go
│   ├── home.tmpl
├── go.mod
├── go.sum
└── main.go
package main

import (
	"net/http"

	"github.com/flamego/flamego"
	"github.com/flamego/template"

	"main/templates"
)

func main() {
	f := flamego.Classic()

	fs, err := template.EmbedFS(templates.Templates, ".", []string{".tmpl"})
	if err != nil {
		panic(err)
	}
	f.Use(template.Templater(
		template.Options{
			FileSystem: fs,
		},
	))

	type Book struct {
		Name   string
		Author string
	}
	f.Get("/", func(t template.Template, data template.Data) {
		data["Name"] = "Joe"
		data["Books"] = []*Book{
			{
				Name:   "Designing Data-Intensive Applications",
				Author: "Martin Kleppmann",
			},
			{
				Name:   "Shape Up",
				Author: "Basecamp",
			},
		}
		t.HTML(http.StatusOK, "home")
	})
	f.Run()
}
package templates

import "embed"

// 如果需要包含子目录中的模板文件则可以追加规则 "**/*"
//go:embed *.tmpl
var Templates embed.FS
<p>
  Hello, <b>{{.Name}}</b>!
</p>
<p>
  Books to read:
  <ul>
    {{range .Books}}
      <li><i>{{.Name}}</i> by {{.Author}}</li>
    {{end}}
  </ul>
</p>

模板缓存

当你的应用运行环境为 flamego.EnvTypeDev(默认运行环境)或 flamego.EnvTypeTest 时,每次响应客户端的请求都会对模板文件进行重新构建,便于开发调试。

通过 Env 函数将运行环境设置为 flamego.EnvTypeProd 可以启用模板缓存功能。