当我调用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">
您可以向模板funcMap添加安全和attr函数:
包主
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等的函数.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。