您的位置 首页 golang

Golang – gin 框架加载多个模板目录

简介

gin默认是使用text/template,只支持加载一个路径下的模板,而且只取最后的名字,所以有相同文件名字的文件,就有可能加载不到了。

gin.Load html Glob,这个是加载模板目录的,查找模板文件的时候,调用的是filepath.Glob(pattern),patter 设置 “templates/**/*”,在Golang之前的版本是可以匹配到目录和文件,但是在现在的稳定版本,跟”tmplates/*/*”的效果是一样的。因此需要加载多级目录就需要使用multitemplate这个库。


代码

package router
import (
"dbops/apps/users"
"fmt"
"io/ioutil"
"os"
"path"
"path/filepath"
"strings"
" github .com/gin-contrib/multitemplate"
"github.com/gin-gonic/gin"
)
func getFilelist(path string, stuffix string) (files []string) {
// 遍历目录
filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
if f ==  nil  {
return err
}
if f.IsDir() {
return nil
}
// 将模板后缀的文件放到列表
if strings.HasSuffix(path, stuffix) {
files = append(files, path)
}
return nil
})
return
}
// LoadTemplateFiles 加载模板
func LoadTemplateFiles(templateDir, stuffix string) multitemplate.Renderer {
r := multitemplate.NewRenderer()
rd, _ := ioutil.ReadDir(templateDir)
for _, fi := range rd {
if fi.IsDir() {
// 如果是目录
for _, f := range getFilelist(path.Join(templateDir, fi.Name()), stuffix) {
// 添加到模板的时候,去掉跟路径
r.AddFromFiles(f[len(templateDir)+1:], f)
}
} else {
if strings.HasSuffix(fi.Name(), stuffix) {
// 如果再根目录底下的文件直接添加
r.AddFromFiles(fi.Name(), path.Join(templateDir, fi.Name()))
}
}
}
fmt.Println(r)
return r
}
// Run run Server
func Run() {
engine := gin.Default()
//  HTML Render加载模板
engine.HTMLRender = LoadTemplateFiles("templates", ".html")
engine. Static ("static", "static")
engine.GET("/login", func(c *gin.Context){
c.HTML(http.StatusOK,"users/login.html",gin.H{})
})
engine.GET("/", func(c *gin.Context){
c.HTML(http.StatusOK,"dashboard/index.html",gin.H{})
})
engine.Run()
}
 

文章来源:智云一二三科技

文章标题:Golang – gin 框架加载多个模板目录

文章地址:https://www.zhihuclub.com/87723.shtml

关于作者: 智云科技

热门文章

网站地图