为了账号安全,请及时绑定邮箱和手机立即绑定

go.rice 将模板加载到 gin 中

go.rice 将模板加载到 gin 中

Go
拉风的咖菲猫 2021-12-07 10:51:12
我有以下目录布局$ 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()


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信