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