私はこの構造を持っています:
type Site struct {
Name string
Pages []int
}
Site
のインスタンスを template に渡します。
すべてのページのリストを書きたい場合は、
{{range .Pages}}
<li><a href="{{.}}">{{.}}</a></li>
{{end}}
ループ内でName
フィールドを使用する最も簡単な方法は何ですか(たとえば、href
をName/page
に変更する)?
外部オブジェクトがテンプレートに渡されたグローバルオブジェクトであるという事実に基づくソリューションは問題ないことに注意してください。
テンプレートに渡された変数は$
。
{{range .Pages}}
<li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
(「変数」の下の text/template ドキュメントを参照してください。)
どうですか:
{{$name := .Name}}
{{range $page := .Pages}}
<li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
または、単にPages
を名前として値を持つマップにしますか?
type Site struct {
Pages map[string]string
}
{{range $page, $name := .Pages}}
<li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
外側のオブジェクト(またはそのプロパティ)の変数を明示的に宣言するよりも簡単な解決策はないようです:
{{$out := .}}
{{range .Pages}}
<li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
編集:この答えはもう正しいものではありません。代わりにchoweyの答えを見てください。