diff options
| author | Carlos C <uldericofilho@gmail.com> | 2015-06-19 11:41:41 +0200 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2015-07-27 16:37:33 +0000 |
| commit | 0645bdd11007a264988029459844cb78ec06e790 (patch) | |
| tree | 7c92f0903dc48d835189f1e216d8ebac7af7d163 /src/html | |
| parent | 6b8762104a90c93ebd51149e7a031738832c5cdc (diff) | |
| download | go-0645bdd11007a264988029459844cb78ec06e790.tar.xz | |
html/template: add examples to package and functions
Change-Id: Ib4fb8256863d908580a07e6f2e1c92ea109ea989
Reviewed-on: https://go-review.googlesource.com/11249
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/html')
| -rw-r--r-- | src/html/template/example_test.go | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/html/template/example_test.go b/src/html/template/example_test.go new file mode 100644 index 0000000000..a75ceec480 --- /dev/null +++ b/src/html/template/example_test.go @@ -0,0 +1,122 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package template_test + +import ( + "fmt" + "html/template" + "log" + "os" +) + +func Example() { + const tpl = ` +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <title>{{.Title}}</title> + </head> + <body> + {{range .Items}}<div>{{ . }}</div>{{else}}<div><strong>no rows</strong></div>{{end}} + </body> +</html>` + + check := func(err error) { + if err != nil { + log.Fatal(err) + } + } + t, err := template.New("webpage").Parse(tpl) + + data := struct { + Title string + Items []string + }{ + Title: "My page", + Items: []string{ + "My photos", + "My blog", + }, + } + + err = t.Execute(os.Stdout, data) + check(err) + + noItems := struct { + Title string + Items []string + }{ + Title: "My another page", + Items: []string{}, + } + + err = t.Execute(os.Stdout, noItems) + check(err) + + // Output: + // <!DOCTYPE html> + // <html> + // <head> + // <meta charset="UTF-8"> + // <title>My page</title> + // </head> + // <body> + // <div>My photos</div><div>My blog</div> + // </body> + // </html> + // <!DOCTYPE html> + // <html> + // <head> + // <meta charset="UTF-8"> + // <title>My another page</title> + // </head> + // <body> + // <div><strong>no rows</strong></div> + // </body> + // </html> + +} + +func Example_autoescaping() { + check := func(err error) { + if err != nil { + log.Fatal(err) + } + } + t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`) + check(err) + err = t.ExecuteTemplate(os.Stdout, "T", "<script>alert('you have been pwned')</script>") + check(err) + // Output: + // Hello, <script>alert('you have been pwned')</script>! +} + +func Example_escape() { + const s = `"Fran & Freddie's Diner" <tasty@example.com>` + v := []interface{}{`"Fran & Freddie's Diner"`, ' ', `<tasty@example.com>`} + + fmt.Println(template.HTMLEscapeString(s)) + template.HTMLEscape(os.Stdout, []byte(s)) + fmt.Fprintln(os.Stdout, "") + fmt.Println(template.HTMLEscaper(v...)) + + fmt.Println(template.JSEscapeString(s)) + template.JSEscape(os.Stdout, []byte(s)) + fmt.Fprintln(os.Stdout, "") + fmt.Println(template.JSEscaper(v...)) + + fmt.Println(template.URLQueryEscaper(v...)) + + // Output: + // "Fran & Freddie's Diner" <tasty@example.com> + // "Fran & Freddie's Diner" <tasty@example.com> + // "Fran & Freddie's Diner"32<tasty@example.com> + // \"Fran & Freddie\'s Diner\" \x3Ctasty@example.com\x3E + // \"Fran & Freddie\'s Diner\" \x3Ctasty@example.com\x3E + // \"Fran & Freddie\'s Diner\"32\x3Ctasty@example.com\x3E + // %22Fran+%26+Freddie%27s+Diner%2232%3Ctasty%40example.com%3E + +} |
