为什么我在Go HTML模板输出中看到ZgotmplZ?

前端之家收集整理的这篇文章主要介绍了为什么我在Go HTML模板输出中看到ZgotmplZ?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我调用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上下文在运行时.示例的输出将是
<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等的函数.

原文链接:https://www.f2er.com/html/229305.html

猜你在找的HTML相关文章