新聞中心
模板引擎特點
- 簡單、易用、強大;
- 支持多模板目錄搜索;
- 支持?
layout?模板設(shè)計; - 支持模板視圖對象單例模式;
- 與配置管理模塊原生集成,使用方便;
- 底層采用了二級緩存設(shè)計,性能高效;
- 新增模板標簽及大量的內(nèi)置模板變量、模板函數(shù);
- 支持模板文件修改后自動更新緩存機制,對開發(fā)過程更友好;
- ?
define/template?標簽支持跨模板調(diào)用(同一模板路徑包括子目錄下的模板文件); - ?
include?標簽支持任意路徑的模板文件引入;
通用視圖管理
通用視圖管理即使用原生的模板引擎?gview?模塊來實現(xiàn)模板管理,包括模板讀取展示,模板變量渲染等等??梢允褂猛ㄟ^方法?gview.Instance?來獲取視圖單例對象,并可以按照單例對象名稱進行獲取。同時也可以通過對象管理器?g.View()?來獲取默認的單例?gview?對象。

創(chuàng)新互聯(lián)科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供中國電信成都樞紐中心,高防主機,成都IDC機房托管,成都主機托管等互聯(lián)網(wǎng)服務(wù)。
接口文檔:
https://pkg.GO.dev/github.com/gogf/gf/v2/os/gview
簡要說明:
- ?
gview.Get?用于根據(jù)給定的一個模板目錄路徑,獲得對應(yīng)的單例模板引擎對象; - ?
gview.New?同樣可以根據(jù)給定的模板目錄路徑創(chuàng)建模板引擎對象,但沒有單例管理; - ?
SetPath/AddPath?用于設(shè)置/添加當前模板引擎對象的模板目錄路徑,其中?SetPath?會覆蓋所有的模板目錄設(shè)置,推薦使用?AddPath?; - ?
Assign/Assigns?用于設(shè)置模板變量,通過該模板引擎解析的所有模板均可以使用這些模板變量; - ?
BindFunc?用于綁定模板函數(shù),具體使用方法參考后續(xù)示例程序; - ?
Parse/ParseContent?用于解析模板文件/內(nèi)容,可以在解析時給定臨時的模板變量及模板函數(shù); - ?
SetDelimiters?用于設(shè)置該模板引擎對象的模板解析分隔符號,默認為?{{ }}?(與?vuejs?前端框架有沖突);
需要注意,從?GoFrame v1.16?版本開始,所有模板的解析方法都額外增加了第一個輸入?yún)?shù)為?Context?上下文變量的傳遞。
示例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()
}
執(zhí)行后,訪問 http://127.0.0.1:8199/template 可以看到解析后的內(nèi)容為:?id:123, name:john?
示例2,解析模板內(nèi)容
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()
}
執(zhí)行后,訪問 http://127.0.0.1:8199/template 可以看到解析后的內(nèi)容為:?id:123, name:john?
示例3,自定義模板分隔符
在項目中我們經(jīng)常會遇到?Golang?默認模板變量分隔符號與?Vue?的變量分隔符號沖突的情況(都使用的是?{{ }}?),我們可以使用?SetDelimiters?方法來自定義全局的?Golang?模板變量分隔符號:
// 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)
}
test.tpl content, vars: ${.}
執(zhí)行后,輸出結(jié)果為:
test.tpl content, vars: map[k:v]
目錄配置方法
?gf?框架的模板引擎支持非常靈活的多目錄自動搜索功能,通過?SetPath?可以修改模板目錄為唯一的一個目錄地址,同時,我們可以通過?AddPath?方法添加多個搜索目錄,模板引擎底層將會按照添加目錄的順序作為優(yōu)先級進行自動檢索。直到檢索到一個匹配的文件路徑為止,如果在所有搜索目錄下查找不到模板文件,那么會返回失敗。
默認目錄配置:
?gview?視圖對象初始化時,默認會自動添加以下模板文件搜索目錄:
- 當前工作目錄及其下的?
template?目錄:例如當前的工作目錄為?/home/www?時,將會添加?/home/www?及?/home/www/template?; - 當前可執(zhí)行文件所在目錄及其下的?
template?目錄:例如二進制文件所在目錄為?/tmp?時,將會添加?/tmp?及?/tmp/template?; - 當前?
main?源代碼包所在目錄及其下的?template?目錄(僅對源碼開發(fā)環(huán)境有效):例如?main?包所在目錄為?/home/john/workspace/gf-app?時,將會添加?/home/john/workspace/gf-app?及?/home/john/workspace/gf-app/template?;
修改模板目錄
我們可以通過以下方式修改視圖對象的模板文件搜索目錄,視圖對象將會只在該指定目錄執(zhí)行配置文件檢索:
- (推薦)單例模式獲取全局?
View?對象,通過?SetPath?方法手動修改; - 修改命令行啟動參數(shù) - ?
gf.gview.path?; - 修改指定的環(huán)境變量 - ?
GF_GVIEW_PATH?;
例如,我們的執(zhí)行程序文件為?main?,那么可以通過以下方式修改模板引擎的模板目錄(?Linux?下):
1、通過單例模式(推薦)
g.View().SetPath("/opt/template")
2、通過命令行參數(shù)
./main --gf.gview.path=/opt/template/
3、通過環(huán)境變量
- 啟動時修改環(huán)境變量:
GF_GVIEW_PATH=/opt/config/; ./main
- 使用?
genv?模塊來修改環(huán)境變量:
genv.Set("GF_GVIEW_PATH", "/opt/template")
自動檢測更新
模板引擎使用了精心設(shè)計的緩存機制,當模板文件第一次被讀取后會被緩存到內(nèi)存,下一次讀取時將會直接從緩存中獲取,以提高執(zhí)行效率。并且,模板引擎提供了對模板文件的自動檢測更新機制,當模板文件在外部被修改后,模板引擎能夠即時地監(jiān)控到并刷新模板文件的緩存內(nèi)容。
新聞標題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame模板引擎-基本介紹
轉(zhuǎn)載來源:http://m.fisionsoft.com.cn/article/djgojgo.html


咨詢
建站咨詢
