mirror of
https://github.com/golang/go
synced 2024-10-04 15:11:20 -06:00
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>
This commit is contained in:
parent
6b8762104a
commit
0645bdd110
122
src/html/template/example_test.go
Normal file
122
src/html/template/example_test.go
Normal file
@ -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
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user