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

pdsfdshx  于 2023-01-22  发布在  Go
关注(0)|答案(1)|浏览(142)

下面的代码:

{{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>,它会把它打印成字符串。
我怎样才能让属性正确地呈现?

carvr3hs

carvr3hs1#

你需要做的

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

以便它知道该字符串可以安全地用作属性
https://pkg.go.dev/html/template#HTMLAttr
HTMLAttr封装来自受信任源(例如dir="ltr")的HTML属性。使用此类型会带来安全风险:封装的内容应该来自受信任的来源,因为它将被逐字地包括在模板输出中。

相关问题