在golang gin简单模板示例中,如何呈现不带引号的字符串?

时间:2019-10-06 22:59:16

标签: templates go gin-gonic

使用自述文件中的示例golang杜松子酒代码:

func main() {

  router := gin.Default()

  router.LoadHTMLGlob("templates/*")
  router.GET("/", func(c *gin.Context) {
    c.HTML(http.StatusOK, "index.tmpl",
      gin.H{
        "foo": "bar",
      })
  }
}

// in template index.tmpl

<script>
{{.foo}}
</script>

// result in html

<script>
"bar"
</script>

但是如何不带引号呢?我只需要bar"bar"

1 个答案:

答案 0 :(得分:1)

模板包实现了HTML上下文感知引擎,以提供注入安全的html。

换句话说,它知道它在script标签内执行,因此它不输出原始字符串,而是输出与js兼容的json编码的字符串。

要解决此问题,与注释建议不同的是,请将字符串设置为template.JS的值,并且安全措施将不会尝试保护字符串。

参考 -https://golang.org/pkg/html/template/

  

包模板(html / template)为以下对象实现了数据驱动的模板   生成可防止代码注入的HTML输出。

  

使用这种类型会带来安全风险:封装的内容   应该来自受信任的来源,因为它将逐字包含在   模板输出。

package main

import (
    "html/template"
    "os"
)

func main() {

    c := `<script>
{{.foo}}
{{.oof}}
</script>`
    d := map[string]interface{}{"foo": "bar", "oof": template.JS("rab")}
    template.Must(template.New("").Parse(c)).Execute(os.Stdout, d)
}

https://play.golang.org/p/6qLnc9ALCeC