当前位置: 首页 > 面试题库 >

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

宁良平
2023-03-14
问题内容

当我调用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等。



 类似资料:
  • 本页和本答案都引用了IP地址172.22.0.3。通过RFC 1918,它在专用网络范围172.16.0.0-172.31.255.255内。它也在我自己的代码中(在docker中运行),但我忘记了为什么。 是Docker默认吗?你能找到推荐人吗?

  • 我是Java新手。我只做了大约一年的编程。Spring使用模板是什么意思?在Spring,有jdbc模板、jms模板等。。java中的模板类是什么?它们是一种特殊的设计模式还是什么? 提前谢谢你。

  • 给定以下代码: 在reduce语句之后我需要什么才能看到reduce的结果?如果一个值被推到输入,我不希望看到任何东西。如果推送具有相同键的第二个值,我希望还原器应用(它确实应用了),并且我还希望还原的结果继续到处理管道中的下一个步骤。正如所描述的,我没有在管道的后续步骤中看到任何东西,我不明白为什么。

  • 以前它工作正常,但现在一切都很慢,而且我没有看到TextField,在层次结构中选择游戏对象时,在编辑器窗口中显示它需要将近5秒的时间。 在此之前,一切都很快,并在编辑器窗口中显示整个层次结构。 现在它是空的: 我从这个问题中得到了答案: 可通过计算机搜索的

  • 我有一个Spring Boot 2.1.6应用程序(Spring 5),我想使用Thymeleaf作为我的模板引擎。我按照在线教程来设置我的项目,视图和控制器,当我想启动它时,我注意到Thymeleaf抱怨说它找不到任何模板: 我想我设置的项目,因为它应该是(至少根据教程和论坛,我可以找到): 我的控制器如下所示: login.html是这样的: 当我打开登录页面时,我得到一个简单的超文本标记语言