模板引擎特点

layoutdefine/templateinclude

通用视图管理

gviewgview.Instanceg.View()gview

接口文档:

简要说明: 

gview.Getgview.NewSetPath/AddPathSetPathAddPathAssign/AssignsBindFuncParse/ParseContentSetDelimiters{{ }}vuejs
goframe v1.16Context

示例1,解析模板文件

index.tpl
id:{{.id}}, name:{{.name}}
main.go
package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	s.BindHandler("/template", func(r *ghttp.Request) {
		r.Response.WriteTpl("index.tpl", g.Map{
			"id":   123,
			"name": "john",
		})
	})
	s.SetPort(8199)
	s.Run()
}
id:123, name:john

示例2,解析模板内容

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	s.BindHandler("/template", func(r *ghttp.Request){
		tplContent := `id:{{.id}}, name:{{.name}}`
		r.Response.WriteTplContent(tplContent, g.Map{
			"id"   : 123,
			"name" : "john",
		})
	})
	s.SetPort(8199)
	s.Run()
}
id:123, name:john

示例3,自定义模板分隔符

GolangVue{{ }}SetDelimitersGolang
// main.go
package main

import (
	"context"
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	v := g.View()
	v.SetDelimiters("${", "}")
	b, err := v.Parse(
		context.TODO(),
		"gview_delimiters.tpl",
		map[string]interface{}{
			"k": "v",
		})
	fmt.Println(err)
	fmt.Println(b)
}
<!-- gview_delimiters.tpl -->
test.tpl content, vars: ${.}

执行后,输出结果为:

<nil>
test.tpl content, vars: map[k:v]

目录配置方法

gfSetPathAddPath

默认目录配置:

gview
template/home/www/home/www/home/www/templatetemplate/tmp/tmp/tmp/templatemaintemplatemain/home/john/workspace/gf-app/home/john/workspace/gf-app/home/john/workspace/gf-app/template

修改模板目录

我们可以通过以下方式修改视图对象的模板文件搜索目录,视图对象将会只在该指定目录执行配置文件检索:

ViewSetPathgf.gview.pathGF_GVIEW_PATH
mainLinux

1、通过单例模式(推荐)

g.View().SetPath("/opt/template")

2、通过命令行参数

./main --gf.gview.path=/opt/template/

3、通过环境变量

  • 启动时修改环境变量:
GF_GVIEW_PATH=/opt/config/; ./main
genv
genv.Set("GF_GVIEW_PATH", "/opt/template")

自动检测更新

模板引擎使用了精心设计的缓存机制,当模板文件第一次被读取后会被缓存到内存,下一次读取时将会直接从缓存中获取,以提高执行效率。并且,模板引擎提供了对模板文件的自动检测更新机制,当模板文件在外部被修改后,模板引擎能够即时地监控到并刷新模板文件的缓存内容。