在模板范围循环内访问 URL 参数
使用 Go 模板时,了解如何在循环内访问数据至关重要。考虑以下代码和模板:
type User struct { Username string Password []byte Email string } func main() { users := []User{ {Username: "Alice", Email: "alice@example.com"}, {Username: "Bob", Email: "bob@example.com"}, } renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{ "lang": chi.URLParam(r, "lang"), "users": users, }) }
{{ 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”结构的一部分。为了解决这个问题,我们可以利用“点”的概念和特殊变量“$”。
理解 Dot 和 $
当调用循环时, “点”(.) 的内容被分配给特殊变量“$”。这允许我们从范围块内的循环外部访问数据。例如,要访问“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 }}
此方法成功解决了该问题,使您能够在范围循环内访问“lang”参数。 “dot”和“$”的行为记录在 Go 模板指南中。
替代方法
如果遇到使用“$”访问数据的场景由于嵌套循环而具有挑战性,请考虑替代选项,例如将“点”分配给临时变量或使用“with”语句创建用于分配数据的专用范围。
以上是如何在 Go 中访问模板范围循环内的 URL 参数?的详细内容。更多信息请关注PHP中文网其他相关文章!