如何设置默认选择选项以使用Golang选择标签?
问题描述:
First, I have found this question:
How can I set the default value for an HTML <select> element in Golang?
But in my case I don't know how to do.
I have many posts data and render them to template.
Controller:
c.Data["posts"] = posts_data
View:
{{ range $post := .posts }}
<option value="{{ $post.ID }}">{{ $post.Name }}</option>
{{ end }}
Works fine.
But if change to:
Controller:
c.Data["posts"] = posts_data
c.Data["post_id"] = param_data
View:
{{ range $post := .posts }}
<option value="{{ $post.ID }}" {{ if eq $post.ID .post_id }}selected="selected"{{ end }}>{{ $post.Name }}</option>
{{ end }}
Got error:
template Execute err: template: posts/index.tpl:20:70: executing "posts/index.tpl" at <.post_id>: can't evaluate field post_id in type models.Post
It's true that post_id
doesn't exists in models.Post
. But how to use it in this way?
答
The range command sets .
to the current value. Use $
to refer to the root value passed to the template:
{{ range $post := .posts }}
<option value="{{ $post.ID }}" {{ if eq $post.ID $.post_id }}selected="selected"{{ end }}>{{ $post.Name }}</option>
{{ end }}
Because range sets .
, the template can be simplified to:
{{ range $post := .posts }}
<option value="{{ .ID }}" {{ if eq .ID $.post_id }}selected="selected"{{ end }}>{{ .Name }}</option>
{{ end }}