一尘不染

Go模板:无法评估类型Y的字段X(X不是Y的一部分,但停留在{{range}}循环中)

go

这里回答了类似的问题,但我认为它不能解决我的问题。

假设您具有以下结构:

type User struct {
    Username string
    Password []byte
    Email string
    ...
}

而且,URL具有如下结构:example.com/en/users,其中"en"URL参数将传递给模板,如下所示:

renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
  "lang":  chi.URLParam(r, "lang"),
  "users": users})

在HTML模板中,我有以下内容:

{{ range .users }}
  <form action="/{{ .lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}

现在,问题在于,由于{{ .lang }}不是该User结构的一部分,所以我得到了错误..那么如何{{ .lang }}在内部访问{{range .users }}


阅读 197

收藏
2020-07-02

共1个答案

一尘不染

点(.)的内容$在调用后分配给range,因此您可以使用$进行访问lang播放):

{{ range .users }}
  <form action="/{{ $.lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}

该行为记录在这里

执行开始时,$将设置为传递给的数据参数Execute,即dot的起始值。

如果使用的是嵌套范围,则始终可以使用with语句或变量赋值语句回退以将点分配给其他对象。

2020-07-02