我使用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:
如何获取{{ $value }}
来将文本解释为HTML?
这是JS控制台中的外观:
我知道这类似于以下问题:Golang html output is being interpreted as plain text instead of being received as html,但是页面的其余部分显示的HTML正常,并且整个页面的内容类型都已设置,但是这个小面板没有显示HTML (按字面显示)。
答案 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 }}