类似的问题在这里得到了回答,但我不认为它解决了我的问题.
假设你有以下结构:
type User struct {
Username string
Password []byte
Email string
...
}
Run Code Online (Sandbox Code Playgroud)
此外,URL的结构如下:example.com/en/users,其中"en"是一个URL参数,将被传递到模板中,如下所示:
renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
"lang": chi.URLParam(r, "lang"),
"users": users})
Run Code Online (Sandbox Code Playgroud)
在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 }}
Run Code Online (Sandbox Code Playgroud)
现在,问题是因为{{.lang}}不是User结构的一部分,所以我得到了错误..那么如何在{{range .users}}中访问{{.lang}}?
nem*_*emo 23
dot(.)的内容$在调用后分配给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 }}
Run Code Online (Sandbox Code Playgroud)
执行开始时,
$设置为传递给的数据参数Execute,即dot的起始值.
如果使用嵌套范围,则始终可以使用with语句或变量赋值语句回退以将点分配给其他内容.请参阅其他答案.
您可以使用变量 .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 }}
Run Code Online (Sandbox Code Playgroud)
请参阅文档:https://golang.org/pkg/text/template/#hdr-Variables