HTML
HTML 是官方的 Go 模板引擎 html/template,查看原始语法文档请点击此处
信息
指定视图目录中的所有模板都会在开始时进行分析和编译,以提高使用时的性能。因此需要注意的是,不应存在同名的 definition
,否则它们会相互覆盖。对于模板化,应使用 {{embed}}
标签
基本示例
./views/index.html
{{template "partials/header" .}}
<h1>{{.Title}}</h1>
{{template "partials/footer" .}}
./views/partials/header.html
<h2>Header</h2>
./views/partials/footer.html
<h2>Footer</h2>
./views/layouts/main.html
<!DOCTYPE html>
<html>
<head>
<title>Main</title>
</head>
<body>
{{embed}}
</body>
</html>
package main
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html/v2"
)
func main() {
// Create a new engine
engine := html.New("./views", ".html")
// Or from an embedded system
// See github.com/gofiber/embed for examples
// engine := html.NewFileSystem(http.Dir("./views", ".html"))
// Pass the engine to the Views
app := fiber.New(fiber.Config{
Views: engine,
})
app.Get("/", func(c *fiber.Ctx) error {
// Render index
return c.Render("index", fiber.Map{
"Title": "Hello, World!",
})
})
app.Get("/layout", func(c *fiber.Ctx) error {
// Render index within layouts/main
return c.Render("index", fiber.Map{
"Title": "Hello, World!",
}, "layouts/main")
})
app.Get("/layouts-nested", func(c *fiber.Ctx) error {
// Render index within layouts/nested/main within layouts/nested/base
return c.Render("index", fiber.Map{
"Title": "Hello, World!",
}, "layouts/nested/main", "layouts/nested/base")
})
log.Fatal(app.Listen(":3000"))
}
使用 embed.FS 的示例
package main
import (
"log"
"net/http"
"embed"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html"
)
//go:embed views/*
var viewsfs embed.FS
func main() {
engine := html.NewFileSystem(http.FS(viewsfs), ".html")
// Pass the engine to the Views
app := fiber.New(fiber.Config{
Views: engine,
})
app.Get("/", func(c *fiber.Ctx) error {
// Render index - start with views directory
return c.Render("views/index", fiber.Map{
"Title": "Hello, World!",
})
})
log.Fatal(app.Listen(":3000"))
}
并将起点更改为视图目录
./views/index.html
{{template "views/partials/header" .}}
<h1>{{.Title}}</h1>
{{template "views/partials/footer" .}}
使用 innerHTML 的示例
package main
import (
"embed"
"html/template"
"log"
"net/http"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html"
)
//go:embed views/*
var viewsfs embed.FS
func main() {
engine := html.NewFileSystem(http.FS(viewsfs), ".html")
engine.AddFunc(
// add unescape function
"unescape", func(s string) template.HTML {
return template.HTML(s)
},
)
// Pass the engine to the Views
app := fiber.New(fiber.Config{Views: engine})
app.Get("/", func(c *fiber.Ctx) error {
// Render index
return c.Render("views/index", fiber.Map{
"Title": "Hello, <b>World</b>!",
})
})
log.Fatal(app.Listen(":3000"))
}
并将起点更改为视图目录
./views/index.html
<p>{{ unescape .Title}}</p>
html 输出
<p>Hello, <b>World</b>!</p>