Home | History | Annotate | Download | only in template
      1 // Copyright 2011 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package template_test
      6 
      7 import (
      8 	"log"
      9 	"os"
     10 	"strings"
     11 	"text/template"
     12 )
     13 
     14 func ExampleTemplate() {
     15 	// Define a template.
     16 	const letter = `
     17 Dear {{.Name}},
     18 {{if .Attended}}
     19 It was a pleasure to see you at the wedding.
     20 {{- else}}
     21 It is a shame you couldn't make it to the wedding.
     22 {{- end}}
     23 {{with .Gift -}}
     24 Thank you for the lovely {{.}}.
     25 {{end}}
     26 Best wishes,
     27 Josie
     28 `
     29 
     30 	// Prepare some data to insert into the template.
     31 	type Recipient struct {
     32 		Name, Gift string
     33 		Attended   bool
     34 	}
     35 	var recipients = []Recipient{
     36 		{"Aunt Mildred", "bone china tea set", true},
     37 		{"Uncle John", "moleskin pants", false},
     38 		{"Cousin Rodney", "", false},
     39 	}
     40 
     41 	// Create a new template and parse the letter into it.
     42 	t := template.Must(template.New("letter").Parse(letter))
     43 
     44 	// Execute the template for each recipient.
     45 	for _, r := range recipients {
     46 		err := t.Execute(os.Stdout, r)
     47 		if err != nil {
     48 			log.Println("executing template:", err)
     49 		}
     50 	}
     51 
     52 	// Output:
     53 	// Dear Aunt Mildred,
     54 	//
     55 	// It was a pleasure to see you at the wedding.
     56 	// Thank you for the lovely bone china tea set.
     57 	//
     58 	// Best wishes,
     59 	// Josie
     60 	//
     61 	// Dear Uncle John,
     62 	//
     63 	// It is a shame you couldn't make it to the wedding.
     64 	// Thank you for the lovely moleskin pants.
     65 	//
     66 	// Best wishes,
     67 	// Josie
     68 	//
     69 	// Dear Cousin Rodney,
     70 	//
     71 	// It is a shame you couldn't make it to the wedding.
     72 	//
     73 	// Best wishes,
     74 	// Josie
     75 }
     76 
     77 // The following example is duplicated in html/template; keep them in sync.
     78 
     79 func ExampleTemplate_block() {
     80 	const (
     81 		master  = `Names:{{block "list" .}}{{"\n"}}{{range .}}{{println "-" .}}{{end}}{{end}}`
     82 		overlay = `{{define "list"}} {{join . ", "}}{{end}} `
     83 	)
     84 	var (
     85 		funcs     = template.FuncMap{"join": strings.Join}
     86 		guardians = []string{"Gamora", "Groot", "Nebula", "Rocket", "Star-Lord"}
     87 	)
     88 	masterTmpl, err := template.New("master").Funcs(funcs).Parse(master)
     89 	if err != nil {
     90 		log.Fatal(err)
     91 	}
     92 	overlayTmpl, err := template.Must(masterTmpl.Clone()).Parse(overlay)
     93 	if err != nil {
     94 		log.Fatal(err)
     95 	}
     96 	if err := masterTmpl.Execute(os.Stdout, guardians); err != nil {
     97 		log.Fatal(err)
     98 	}
     99 	if err := overlayTmpl.Execute(os.Stdout, guardians); err != nil {
    100 		log.Fatal(err)
    101 	}
    102 	// Output:
    103 	// Names:
    104 	// - Gamora
    105 	// - Groot
    106 	// - Nebula
    107 	// - Rocket
    108 	// - Star-Lord
    109 	// Names: Gamora, Groot, Nebula, Rocket, Star-Lord
    110 }
    111