一架梯子,一头程序猿,仰望星空!
Iris Web框架教程 > 内容正文

Go Iris模版渲染


模板渲染

Iris内置支持八个模板引擎,开发者仍然可以使用任何go语言外部模板引擎,因为Context.ResponseWriter()是一个io.Writer

所有模板引擎共享一个公共的API,包括使用嵌入的资源进行解析、布局和Party-specific布局、模板函数、部分渲染等。

# 名称 解析器
1 HTML html/template
2 Blocks kataras/blocks
3 Django flosch/pongo2
4 Pug Joker/jade
5 Handlebars aymerick/raymond
6 Amber eknkc/amber
7 Jet CloudyKit/jet
8 Ace yosssi/ace

可以为每个Party注册一个视图引擎。使用Application/Party.RegisterView(ViewEngine)方法进行注册,示例如下:

从”./views”文件夹加载所有扩展名为”.html”的模板,并使用标准的html/template包进行解析。

// [app := iris.New...]
tmpl := iris.HTML("./views", ".html")
app.RegisterView(tmpl)

在主要路由处理程序中使用Context.View方法来渲染或执行一个视图。

if err := ctx.View("hi.html"); err!=nil {
    ctx.HTML("%s", err.Error())
    return
}

通过中间件或主处理程序使用Context.ViewData方法在视图中将Go值与键值模式进行绑定

{{.message}}"Hello world!"进行绑定。

ctx.ViewData("message", "Hello world!")

根绑定:

if err := ctx.View("user-page.html", User{}); err!=nil {
    ctx.HTML("%s", err.Error())
    return
}

// root binding as {{.Name}}

使用preferred view engineAddFunc方法来添加模板函数

//       function名称,输入参数,返回值
tmpl.AddFunc("greet", func(s string) string {
    return "Greetings " + s + "!"
})

如果要每次请求都重新加载,调用视图引擎的Reload方法。

tmpl.Reload(true)

如果要使用嵌入的模板而不依赖于本地文件系统,请使用go-bindata外部工具,将其生成的AssetFile()函数作为首个输入参数传递给preferred view engine

 tmpl := iris.HTML(AssetFile(), ".html")

示例代码:
翻译结果:

// 文件: main.go
包 main

导入 "github.com/kataras/iris/v12"

func main() {
    app := iris.New()

    // 从 "./views" 文件夹解析所有后缀是 ".html" 的模板
    // 使用标准的 `html/template` 包进行解析
    tmpl := iris.HTML("./views", ".html")
    // 设置自定义分隔符
    tmpl.Delims("{{", "}}")
    // 开启对本地模板文件变化的重新编译
    tmpl.Reload(true)

    // 默认的模板函数有:
    //
    // - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
    // - {{ render "header.html" . }}
    // 以及到当前页面的相对路径:
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // 注册一个自定义模板函数:
    tmpl.AddFunc("greet", func(s string) string {
        return "问候 " + s + "!"
    })

    // 将视图引擎注册到应用中,
    // 这样会加载模板。
    app.RegisterView(tmpl)

    // 方法: GET
    // 资源: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // 将 {{.message}} 绑定到 "Hello world!"
        ctx.ViewData("message", "Hello world!")
        // 渲染模板文件: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })

    app.Listen(":8080")
}
Hi 页面


{{.message}}
{{greet "to you"}}

在浏览器中打开一个新的选项卡访问 http://localhost:8080

渲染的结果应该如下所示:

    Hi 页面


    Hello world!
    问候 to you!