首页 > 文章列表 > GoLang 模板中如何添加 HTML 标签属性

GoLang 模板中如何添加 HTML 标签属性

449 2024-02-06
问题内容

我有以下代码:

{{range . }}
    <td {{ if not .isdisabled }}onclick="return toggle_active($(this))"{{ end }}>
      [x]
    </td>
{{end}}

这有效,它按应有的方式放置 onclick 事件。

但是,如果我尝试将 onclick 事件动态创建为字符串(无论是在模板中还是作为 go 函数),它都不起作用。

示例:

{{$clickevent := "return toggle_active($(this));"}}
<td {{$clickevent}}>[x]</td>

或者:

func (d TemplateObject) Click() string {
    return "onclick="toggle_active($(this))""
}

<td {{.Click}}>[x]</td>

它在 html 中呈现如下:

如果我不把它放在 <tag> 本身 <td>{{$clickevent}}</td> 中,它会将其打印为字符串。

如何才能正确渲染属性?


正确答案


你需要做

func (d TemplateObject) Click() template.HTMLAttr {
    return "onclick="toggle_active($(this))""
}

以便它知道该字符串可以安全地用作属性

https://pkg.go.dev/html/template#htmlattr

htmlattr 封装来自可信源的 html 属性,例如 dir="ltr"。 使用此类型会带来安全风险:封装的内容应来自受信任的来源,因为它将逐字包含在模板输出中。