英文:
How to check non standard object equivalence in golang template
问题
我正在使用HTML模板输出一个下拉列表,代码如下:
{{range .Organisations}}
<option value="{{.Uuid}}">{{.Name}}</option>
{{end}}
我想通过使用eq
比较器来指示其中一个项目被选中。我知道可能会有一个潜在的复杂性,就是.Uuid
是一个*gocql.UUID
类型的变量。我尝试这样做:
{{range .Organisations}}
<option value="{{.Uuid}}"{{if eq $.Contact.Organisation .Uuid}} selected="selected"{{end}}>{{.Name}}</option>
{{end}}
但是会出现以下错误信息:
page:32:36: 执行"submit_scholarship"时出错,位置在<eq $.Contact.Organis...>:调用eq时发生错误:比较的类型无效
如果能给我指点一下正确的方向,我将不胜感激。
英文:
I am outputting a dropdown list using a html template, as follows:
{{range .Organisations}}
<option value="{{.Uuid}}">{{.Name}}</option>
{{end}}
I want to indicate that one of the items should be selected by doing an eq
comparator. The only potential complication I am aware of is that the .Uuid
is a *gocql.UUID
, I am trying to do this:
{{range .Organisations}}
<option value="{{.Uuid}}"{{if eq $.Contact.Organisation .Uuid}} selected="selected"{{end}}>{{.Name}}</option>
{{end}}
But it results in the following error message:
> page:32:36: executing "submit_scholarship" at <eq $.Contact.Organis...>: error calling eq: invalid type for comparison
Any pointers in the right direction would be much appreciated.
答案1
得分: 3
eq只适用于基本类型。您可以添加自定义函数来实现此功能。
http://play.golang.org/p/rkYnlqmeLA
package main
import (
"html/template"
"os"
)
type s struct {
Name []byte
Uuid []byte
}
func main() {
data := s{[]byte("aa"), []byte("aa")}
funcMap := template.FuncMap{
"equals": func(a []byte, b []byte) bool {
return string(a) == string(b)
},
}
var html = `{{if equals .Name .Uuid }}hi{{end}}`
tmpl, _ := template.New("test").Funcs(funcMap).Parse(html)
err := tmpl.Execute(os.Stdout, data)
if err != nil {
println(err.Error())
}
}
英文:
eq only works on basic types. You can add a custom function to do this.
http://play.golang.org/p/rkYnlqmeLA
package main
import (
"html/template"
"os"
)
type s struct {
Name []byte
Uuid []byte
}
func main() {
data := s{[]byte("aa"), []byte("aa")}
funcMap := template.FuncMap{
"equals": func(a []byte, b []byte) bool {
return string(a) == string(b)
},
}
var html = `{{if equals .Name .Uuid }}hi{{end}}`
tmpl, _ := template.New("test").Funcs(funcMap).Parse(html)
err := tmpl.Execute(os.Stdout, data)
if err != nil {
println(err.Error())
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论