【发布时间】:2021-05-01 08:18:01
【问题描述】:
有没有办法让我定义,当我在 Go html 模板中输出一个值时,格式化完成的方式而不是打印字符串表示,而无需调用函数来显式转换它?
例如,假设我有一个类型 Person 并且我有一个只有 {{.}} 的模板我希望它自动创建指向该人页面的链接,但如果我使用相同的模板并传递一个值不同的类型会生成一些其他的 HTML。
我不想写{{.HTML}} 或{{. | html}} 之类的东西。我已经知道这些是可能的,但我的问题是关于如何避免这些。
我曾想过Person.String() 以某种方式返回 HTML 代码而没有被转义,但除了没有让它工作之外,它似乎也是一个丑陋的解决方案。
我考虑过的另一个解决方案是将所有内容作为 HTML 传递到模板中,但随后我无法再访问属性(例如 {{.name}} 仅输出名称),我还必须转换所有内容以防万一它在模板中使用。
【问题讨论】:
-
最简单的方法,大概是在
Person上定义一个方法。即func (p *Person) HTML() template.HTML
标签: go go-templates go-html-template