我有以下目录布局$ ls templates/bar.html foo.html我已经运行了以下命令$ rice embed-go我的代码看起来像包主import ( "github.com/gin-gonic/gin" "github.com/GeertJohan/go.rice" "fmt" "html/template")func main() { router := gin.Default() //html := template.Must(template.ParseFiles("templates/foo.html", "templates/bar.html")) //router.SetHTMLTemplate(html) templateBox, err := rice.FindBox("templates") if err != nil { fmt.Println(err) } list := [...]string{"foo.html", "bar.html"} for _, x := range list { templateString, err := templateBox.String(x) if err != nil { fmt.Println(err) } tmplMessage, err := template.New(x).Parse(templateString) if err != nil { fmt.Println(err) } router.SetHTMLTemplate(tmplMessage) } router.GET("/index", func(c *gin.Context) { c.HTML(200, "foo.html", gin.H{ "Message": "Main website", }) }) router.GET("/bar", func(c *gin.Context) { c.HTML(200, "bar.html", gin.H{ "Message": "so much bar", }) }) router.Run(":8080")}我遇到的问题是我可以很好地卷曲以下 URL$ curl 0:8080/barbar so much bar问题是 /index url 不起作用,因为它SetHTMLTemplate正在覆盖它。我想知道如何将多个加载的模板从 go.rice 创建的 bindata 文件传递到 gin 中。我收到以下错误[GIN-debug] [ERROR] html/template: "foo.html" is undefined[GIN] 2016/01/17 - 07:19:40 | 500 | 67.033µs | 127.0.0.1:52467 | GET /index谢谢
1 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
SetHTMLTemplate 每次在循环中调用时都会覆盖模板。
看了下面的,你可以试试https://github.com/gin-gonic/gin/issues/320:
func loadTemplates() multitemplate.Render {
templateBox, err := rice.FindBox("templates")
if err != nil {
fmt.Println(err)
}
r := multitemplate.New()
list := [...]string{"foo.html", "bar.html"}
for _, x := range list {
templateString, err := templateBox.String(x)
if err != nil {
fmt.Println(err)
}
tmplMessage, err := template.New(x).Parse(templateString)
if err != nil {
fmt.Println(err)
}
r.Add(x, tmplMessage)
}
return r
}
然后在您的路线定义中:
router.HTMLRender = loadTemplates()
- 1 回答
- 0 关注
- 216 浏览
添加回答
举报
0/150
提交
取消