首先,我发现了这个问题:
如何在 Golang 中设置 HTML <select> 元素的默认值?
但就我而言,我不知道该怎么做。
我有很多帖子数据并将它们呈现给模板。
控制器:
c.Data["posts"] = posts_data
Run Code Online (Sandbox Code Playgroud)
看法:
{{ range $post := .posts }}
<option value="{{ $post.ID }}">{{ $post.Name }}</option>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
工作正常。
但如果改为:
控制器:
c.Data["posts"] = posts_data
c.Data["post_id"] = param_data
Run Code Online (Sandbox Code Playgroud)
看法:
{{ range $post := .posts }}
<option value="{{ $post.ID }}" {{ if eq $post.ID .post_id }}selected="selected"{{ end }}>{{ $post.Name }}</option>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
出现错误:
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
Run Code Online (Sandbox Code Playgroud)
确实,这post_id在 中不存在models.Post。但这样如何使用呢?
range 命令设置.为当前值。用于$引用传递给模板的根值:
{{ range $post := .posts }}
<option value="{{ $post.ID }}" {{ if eq $post.ID $.post_id }}selected="selected"{{ end }}>{{ $post.Name }}</option>
{{ end }}
Run Code Online (Sandbox Code Playgroud)
由于范围设置.,模板可以简化为:
{{ range $post := .posts }}
<option value="{{ .ID }}" {{ if eq .ID $.post_id }}selected="selected"{{ end }}>{{ .Name }}</option>
{{ end }}
Run Code Online (Sandbox Code Playgroud)