Несколько файлов с использованием template.ParseFiles в golang

Например, у меня есть

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", а не второй файл footer.html. Как загрузить несколько файлов с шаблоном. ParseFiles? Какой самый эффективный способ сделать это?

Спасибо заранее.

Ответы

Ответ 1

В качестве основного шаблона используется только первый файл. Другие файлы шаблонов должны быть включены из первого так:

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

Точка после "footer.html" передает данные от Execute до шаблона нижнего колонтитула - переданное значение становится . в включенном шаблоне.

Ответ 2

Существует небольшой недостаток в методе user634175: {{template "footer.html" .}} в первом шаблоне должен быть жестко закодирован, что затрудняет изменение footer.html в нижнем колонтитуле.

И вот небольшое улучшение.

header.html:

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

footer.html:

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

Так что footer.html можно изменить на любой файл, который определяет "нижний колонтитул", чтобы сделать разные страницы