Similar question answered here,但我认为它不能解决我的问题。
假设你有以下结构:
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 }}
?
在调用.
之后,dot($
)的内容被分配给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
的数据参数,即dot的起始值。
如果使用嵌套范围,则可以始终使用with
语句或变量赋值语句回退以将点分配给其他内容。请参阅the other answer。
您可以将变量用于.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 }}