В примере простого шаблона golang gin как вы выводите строку без кавычек? - PullRequest
0 голосов
/ 07 октября 2019

Используя пример кода golang gin из README:

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 Ответ

1 голос
/ 07 октября 2019

пакет шаблона реализует механизм, поддерживающий контекст HTML, для обеспечения безопасности HTML-кода для инъекций.

Другими словами, он знает, что он выполняется внутри тега скрипта, поэтому он не выводит необработанную строку, а кодированные в json строки, совместимые с js.

Чтобы исправить это, в отличие от комментария, задайте для строки значение template.JS, и меры безопасности не будут пытаться защитить строки.

ref - 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

...