0

有没有办法让我定义,当我在 Go html 模板中输出一个值时,格式化完成的方式而不是打印字符串表示,而无需调用函数来显式转换它?

例如,假设我有一个类型Person,并且我有一个模板,只是{{.}}我希望它自动创建指向该人页面的链接,但如果我使用相同的模板并传递不同类型的值,则会生成一些其他 HTML。

我不想做的是不得不写类似{{.HTML}}or的东西{{. | html}}。我已经知道这些是可能的,但我的问题特别是关于如何避免这些。

我一直在考虑Person.String()以某种方式返回 HTML 代码而不被转义,但除了没有让它工作之外,它似乎也是一个丑陋的解决方案。

我考虑过的另一个解决方案是将所有内容作为 HTML 传递到模板中,但是我无法再访问属性(比如{{.name}}只输出名称),我还必须将所有内容都转换为 HTML,以防万一模板中使用。

4

1 回答 1

2

创建一个返回template.HTML类型的方法。IE:

func (p *Person) HTML() template.HTML {
    return fmt.Sprintf(`<a href="/person/%v">%s</a>`, p.id, template.HTMLEscapeString(p.name))
}

然后在您的模板中:

{{ .HTML }}
于 2021-01-27T13:29:32.050 回答