В примере простого шаблона golang gin, как вы отображаете строку без кавычек?

Используя пример кода 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"?


person Andrew Arrow    schedule 06.10.2019    source источник
comment
foo: template.HTML(‹script›bar‹/script›), похоже, работает, если вы визуализируете весь тег сценария и удаляете теги сценария из шаблона.   -  person Andrew Arrow    schedule 07.10.2019


Ответы (1)


пакет шаблона реализует контекстно-зависимый HTML-движок для обеспечения безопасного внедрения HTML-кода.

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

Чтобы исправить это, в отличие от комментария, сделайте строку значением 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

person mh-cbon    schedule 07.10.2019