当我调用Go模板函数来输出
HTML时,它显示ZgotmplZ.
示例代码:
http://play.golang.org/p/tfuJa_pFkm
package main import ( "html/template" "os" ) func main() { funcMap := template.FuncMap{ "printSelected": func(s string) string { if s == "test" { return `selected="selected"` } return "" },"safe": func(s string) template.HTML { return template.HTML(s) },} template.Must(template.New("Template").Funcs(funcMap).Parse(` <option {{ printSelected "test" }} {{ printSelected "test" | safe }} >test</option> `)).Execute(os.Stdout,nil) }
输出:
<option ZgotmplZ ZgotmplZ >test</option>
解决方法
“ZgotmplZ”是一个特殊的值,表示不安全的内容达到了
CSS或URL上下文在运行时.示例的输出将是
CSS或URL上下文在运行时.示例的输出将是
<img src="#ZgotmplZ">
包主
import ( "html/template" "os" ) func main() { funcMap := template.FuncMap{ "attr":func(s string) template.HTMLAttr{ return template.HTMLAttr(s) },"safe": func(s string) template.HTML { return template.HTML(s) },} template.Must(template.New("Template").Funcs(funcMap).Parse(` <option {{ .attr |attr }} >test</option> {{.html|safe}} `)).Execute(os.Stdout,map[string]string{"attr":`selected="selected"`,"html":`<option selected="selected">option</option>`})
}
输出将如下所示:
<option selected="selected" >test</option> <option selected="selected">option</option>
您可能需要定义一些其他可以将字符串转换为template.CSS,template.JS,template.JSStr,template.URL等的函数.