text/template.ParseFiles în Go

Încarcă șabloane din fișiere; fiecare fișier devine un șablon numit după numele fișierului.

Sintaxă
func ParseFiles(filenames ...string) (*Template, error)
func ParseGlob(pattern string) (*Template, error)

Ce face text/template.ParseFiles

template.ParseFiles("email.tmpl", "subsol.tmpl") citește fișierele și le parsează. Fiecare fișier devine un șablon cu numele fișierului (fără director), iar șablonul returnat este primul fișier. Șabloanele din același set se pot include unul pe altul cu {{template "subsol.tmpl" .}}.

template.ParseGlob("sabloane/*.tmpl") încarcă toate fișierele care se potrivesc cu modelul. Pentru a executa un anumit șablon din set, folosește ExecuteTemplate cu numele lui. Pentru fișiere incluse în program la compilare (//go:embed) există template.ParseFS.

Parametri

Parametru Descriere
filenames Căile fișierelor (cel puțin unul).

Ce returnează

Setul de șabloane (*template.Template) și o eroare (fișier lipsă sau sintaxă greșită).

Exemple

Exemplul 1: Șablon de e-mail cu subsol separat

package main

import (
	"fmt"
	"os"
	"text/template"
)

func main() {
	os.WriteFile("bun-venit.tmpl", []byte("Bună, {{.Nume}}!\nContul tău a fost creat.\n{{template \"subsol.tmpl\" .}}"), 0o644)
	os.WriteFile("subsol.tmpl", []byte("--\nEchipa Dexblog | {{.Email}}\n"), 0o644)

	t, err := template.ParseFiles("bun-venit.tmpl", "subsol.tmpl")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("Șablon principal:", t.Name())
	t.Execute(os.Stdout, map[string]string{"Nume": "Ana", "Email": "ana@example.ro"})
}

Rezultat

Șablon principal: bun-venit.tmpl
Bună, Ana!
Contul tău a fost creat.
--
Echipa Dexblog | ana@example.ro

Exemplul 2: Fișier lipsă

package main

import (
	"fmt"
	"text/template"
)

func main() {
	_, err := template.ParseFiles("sabloane/lipsa.tmpl")
	fmt.Println(err)
}

Rezultat

open sabloane/lipsa.tmpl: no such file or directory

Greșeli frecvente

  • Creezi șablonul cu template.New("pagina") și apoi .ParseFiles("sabloane/pagina.html"): numele trebuie să fie "pagina.html", altfel Execute dă eroarea ... is an incomplete or empty template.
  • Două fișiere cu același nume în directoare diferite: ultimul îl înlocuiește pe primul, pentru că numele șablonului este doar numele fișierului.

Comenzi înrudite

  • text/template.Template.ExecuteTemplate: Execută din set șablonul cu numele dat (definit cu {{define}} sau încărcat dintr-un fișier).
  • text/template.Must: Primește rezultatul lui Parse (șablon, eroare) și oprește programul cu panică dacă există eroare; pentru șabloane fixe.
  • text/template.New: Creează un șablon text cu un nume; Parse îi încarcă textul cu acțiuni {{…}} care vor fi completate din date.