为什么我在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>


慕田峪7331174
浏览 332回答 3
3回答

慕村225694

我<img src="{{myfunction}}">在myfunction返回编码图像的地方也遇到了类似的问题。最后,我解决了它,而不是返回字符串函数template.URL(mystring)。

慕盖茨4494581

您试图在template / html认为不安全的地方输出HTML(例如,在HTML元素内部,如下所示:<option&nbsp;{{&nbsp;printSelected&nbsp;}}>我找不到任何方法可以确信它是安全的(包括返回template.HTML而不是字符串);我发现的唯一替代方法是重写模板,在此示例中,请使用bool输出:<option&nbsp;{{&nbsp;if&nbsp;printSelected&nbsp;}}selected{{&nbsp;end&nbsp;}}>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go