Similar question answered here,但我认为这并不能解决我的问题.

假设您有以下 struct :

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

此外,URL的 struct 如下: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 struct 的一部分,所以我得到了错误..那我怎么才能进入{{ range .users }}里面的{{ .lang }}

推荐答案

点(.)的内容在调用range之后赋给$,因此您可以使用$访问lang(on play):

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

该行为记录为here:

当执行开始时,$被设置为传递给Execute的数据参数,即点的起始值.

如果您使用的是嵌套范围,则始终可以使用with语句或变量赋值语句将点分配给其他内容.请看the other answer.

Go相关问答推荐

为什么在GO中打印变量会导致堆栈溢出?

带有条件的for循环中缺少RETURN语句

在GO中使用泛型类型 struct 实现接口方法

Wamtime Memory中的‘Offset’是什么?Read?

为什么没有正确生成这些元组?

如何在正则表达式中使整个单词可选?

为什么 mux.Vars() 返回空的 map[]

在 Go sync.Map 中,为什么这部分实现不一致或者我误解了什么?

如何在 fyne-io/fyne 中设置文本的字母间距?

如何使用 sync.WaitGroup 来执行所有的 goroutine?

如何判断范围内的字段?

是否可以从 golang 中的参数推断类型?

Go 的垃圾收集器在使用时删除 ZeroMQ 套接字

使用 os/exec 和在命令行执行之间的结果莫名其妙地不同

assert: mock: I don't know what to return because the method call was unexpected 在 Go 中编写单元测试时出错

fmt.Printf() 标志 '0' 不会被字符串忽略

golang pic.ShowImage 为什么它不生成图像而是向我发送base64值

从 Makefile 运行时权限被拒绝

如何 Select 前 N 个元素 Gin-Gorm

Golang Echo Labstack 如何在模板视图中调用函数/方法