英文:
How to add an HTML Tag Attribute in GoLang Template
问题
我有以下代码:
{{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>
本身中,而是像这样打印字符串 {{$ClickEvent}}
,它会将其作为字符串输出。
如何才能正确呈现属性?
英文:
I have the following code:
{{range . }}
<td {{ if not .IsDisabled }}onclick="return toggle_active($(this))"{{ end }}>
[x]
</td>
{{end}}
This works, it puts the onclick event like it should.
However, if I try to create the onclick
event dynamically as a string (either in the template, or as a Go function, it doesn't work.
Example:
{{$clickEvent := "return toggle_active($(this));"}}
<td {{$clickEvent}}>[x]</td>
Or:
func (d TemplateObject) Click() string {
return "onclick=\"toggle_active($(this))\""
}
<td {{.Click}}>[x]</td>
It renders it like this in the HTML:
If I don't put it in the <tag>
itself <td>{{$ClickEvent}}</td>
it prints it as a string.
How can I get the attribute to render correctly?
答案1
得分: 2
你需要将以下代码进行翻译:
func (d TemplateObject) Click() template.HTMLAttr {
return "onclick=\"toggle_active($(this))\""
}
这样它就知道该字符串可以安全地用作属性。
https://pkg.go.dev/html/template#HTMLAttr
HTMLAttr 封装了来自可信源的 HTML 属性,例如
dir="ltr"
。
使用此类型存在安全风险:封装的内容应来自可信源,因为它将原样包含在模板输出中。
英文:
You need to do
func (d TemplateObject) Click() template.HTMLAttr {
return "onclick=\"toggle_active($(this))\""
}
so that it knows the string is safe to use as an attribute
https://pkg.go.dev/html/template#HTMLAttr
> HTMLAttr encapsulates an HTML attribute from a trusted source, for example, dir="ltr"
.
> Use of this type presents a security risk: the encapsulated content should come from a trusted source, as it will be included verbatim in the template output.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论