golang 的静态文件打包输出 如何与gin结合作为模板输出 packr

之前gin是通过 router.LoadHTMLGlob("templates/*")
然后指定模板文件名可以直接加载html文件输出的,

现在我想用 packr 把静态文件作为资源文件内嵌,怎么与gin合作?

现在只能拿到静态文件的字符串,作为string输出是没问题
c.String(200, readmeHtml);

但如何像gin一样带变量输出

router.GET("/", func(c *gin.Context) {
    c.HTML(http.StatusOK, "readme.html", gin.H{
    "message": "hello world",
    })
})
阅读 5.6k
1 个回答

其实你还是要使用template去Parse一下的,例如packr官网的结构:

├── main.go
└── templates
    ├── admin
    │   └── index.html
    └── index.html

先用FindString查找对应文件的内容,然后使用html/template创建模板并解析:

func initTemplates() *template.Template {
    box := packr.NewBox("./templates")
    t := template.New("")

    tmpl := t.New("index.html")
    data, _ := box.FindString("index.html")
    tmpl.Parse(data)

    tmpl = t.New("admin/index.html")
    data, _ = box.FindString("admin/index.html")
    tmpl.Parse(data)
    return t
}

上面这个函数可以使用配置来简化代码。

然后使用gin.EngineSetHTMLTemplate设置刚刚创建好的模板:

func main() {
    r := gin.Default()
    r.SetHTMLTemplate(initTemplates())
    r.GET("/", func(c *gin.Context) {
        c.HTML(200, "index.html", nil)
    })
    r.Run()
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题