Similar question answered here,但我认为它不能解决我的问题。
我们假设你有以下结构:
type User struct {
Username string
Password []byte
Email string
...
}
此外,网址结构如下: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 }}
?
答案 0 :(得分:21)
调用.
后,点($
)的内容已分配给range
,因此您可以使用$
访问lang
({{ 3}}):
{{ range .users }}
<form action="/{{ $.lang }}/users" method="POST">
<input type="text" name="Username" value="{{ .Username }}">
<input type="text" name="Email" value="{{ .Email }}">
</form>
{{ end }}
行为记录在案on play:
执行开始时,
$
设置为传递给Execute
的数据参数,即点的起始值。
如果使用嵌套范围,则始终可以使用with
语句或变量赋值语句回退以将点分配给其他内容。请参阅here。
答案 1 :(得分:7)
您可以将变量用于.lang
{{ $lang := .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 }}