Golang tmpl HTML文本被解释为纯文本,而不是使用HTML

时间:2018-08-16 23:23:49

标签: go

我使用Go包含HTML标签的模板提供了一些数据。当我尝试显示此数据时,它将按字面显示全文,包括HTML标签。这是代码:

在我的.tmpl中,我遍历一个名为.SimRpms的对象,该对象的{{ $value }}中带有html,如<br>

{{ range $key, $value := .SimRpms }}
    <div class="col-md-4">
        <div class="panel panel-default">
          <div class="panel-heading">{{ $key }}</div>
          <div class="panel-body">{{ $value }}</div>
        </div>
    </div>
{{ end }}

但是,当我查看呈现的页面时,{{ $value }}呈现为纯文本而不是html:

html is rendered as plain text

如何获取{{ $value }}来将文本解释为HTML?

这是JS控制台中的外观:

js console

我知道这类似于以下问题:Golang html output is being interpreted as plain text instead of being received as html,但是页面的其余部分显示的HTML正常,并且整个页面的内容类型都已设置,但是这个小面板没有显示HTML (按字面显示)。

2 个答案:

答案 0 :(得分:3)

package main

import (
    "html/template"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", SayHello)
    log.Fatal(http.ListenAndServe(":2332", nil))
}
func SayHello(w http.ResponseWriter, r *http.Request) {
    t, err := template.ParseGlob("hello.gtml")
    if err != nil {
        panic(err)
    }
    t.Execute(w, map[string]template.HTML{"name": template.HTML("<a>Katie Sissons</a>")})
    return
}

使用模板

hello.gtml

<html>
    <head></head>
    <body>{{ .name  }}</body>
</html>

html/template包将template.HTML视为类型,并将转义应用于普通字符串。如果您希望字符串不转义,这种类型可以为您做到这一点。

答案 1 :(得分:0)

我最终要做的就是操纵我正在显示的数据。我没有使用map[string]string来代替SimRpms,而是使用map[string][]string以便遍历字符串切片并在它们之间插入<br>

{{ range $key, $value := .SimRpms }}
    <div class="col-md-4">
        <div class="panel panel-default">
          <div class="panel-heading">{{ $key }}</div>
          <div class="panel-body">
            {{ range $keytwo, $valuetwo := $value }}
                {{ $valuetwo }}<br>
            {{ end }}
          </div>
        </div>
    </div>
{{ end }}