20

たとえば、私は持っています

package main

import "html/template"
import "net/http"

func handler(w http.ResponseWriter, r *http.Request) {
    t, _ := template.ParseFiles("header.html", "footer.html")
    t.Execute(w, map[string] string {"Title": "My title", "Body": "Hi this is my body"})
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

header.html で:

Title is {{.Title}}

footer.html で:

Body is {{.Body}}

に行くとhttp://localhost:8080/、「Title is My title」しか表示されず、2 番目のファイル footer.html は表示されません。template.ParseFiles で複数のファイルを読み込むにはどうすればよいですか? これを行う最も効率的な方法は何ですか?

前もって感謝します。

4

2 に答える 2

29

最初のファイルのみがメイン テンプレートとして使用されます。他のテンプレート ファイルは、次のように最初から含める必要があります。

Title is {{.Title}}
{{template "footer.html" .}}

後のドット"footer.html"は、データを からExecuteフッター テンプレートに渡します。渡された値は.、含まれるテンプレートになります。

于 2012-09-01T15:41:42.117 に答える
22

user634175 の方法には少し欠点があります{{template "footer.html" .}}。最初のテンプレートの をハード コードする必要があるため、footer.html を別のフッターに変更するのが難しくなります。

そして、ここに少し改善があります。

header.html:

Title is {{.Title}}
{{template "footer" .}}

フッター.html:

{{define "footer"}}Body is {{.Body}}{{end}}

footer.html を「フッター」を定義する任意のファイルに変更して、別のページを作成できるようにします。

于 2012-12-04T07:13:20.807 に答える