这篇文章我们讲讲gin的多模板渲染
首先我们要引入github.co/gin-contrib/multitemplate库
1、更改gin的模板渲染
func init() { engine = gin.Default() //设置模板渲染 engine.HTMLRender = loadTemplates("templates", "web", "admin")}
2、加载模板
func loadTemplates(templatesDir string, module ...string) multitemplate.Renderer { r := multitemplate.NewRenderer() for _, moduleName := range module { layouts, err := filepath.Glob("./" + templatesDir + "/" + moduleName + "/*.html") if err != nil { panic(err.Error()) }
includes, err := filepath.Glob("./" + templatesDir + "/" + moduleName + "/**/*.html") if err != nil { panic(err.Error()) } for _, include := range includes { fmt.Println(layouts) layoutCopy := make([]string, len(layouts)) copy(layoutCopy, layouts) files := append(layoutCopy, include) //给模板添加自定义函数 r.AddFromFilesFuncs( strings.Replace(filepath.ToSlash(include), templatesDir, "", -1), template.FuncMap{ "xss": xss, "adminUrl": adminUrl, "url": url, "myFunc": myFunc, }, files...) }
}
return r}
这个函数,把templates目录下的模板按照文件路径的方式进行命名,例如/web/a/index.html,这个就是一个模板的名称。简单的说就是把模板的名称和文件路径进行映射(我没有进行递归遍历)。
3、给模板添加自定义函数
r.AddFromFilesFuncs( strings.Replace(filepath.ToSlash(include), templatesDir, "", -1), template.FuncMap{ "xss": xss, "adminUrl": adminUrl, "url": url, "myFunc": myFunc, }, files...)有兴趣的同学可以去百度云获取代码