如何设置默认选择选项以使用 Golang 选择标签?

020*_*402 3 go

首先,我发现了这个问题:

如何在 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。但这样如何使用呢?

Cer*_*món 5

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)