猿问

go.rice 将模板加载到 gin 中

我有以下目录布局


$ 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/bar

bar 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

谢谢


拉风的咖菲猫
浏览 217回答 1
1回答

慕桂英546537

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()
随时随地看视频慕课网APP

相关分类

Go
我要回答