html⽂档模板,htmltemplate(模板)
import "html/template"
概述
索引
⽰例
概观
模板包(html/template)实现了数据驱动的模板,以便在代码注⼊过程中安全地⽣成HTML输出。它提供了与包⽂本/模板相同的接⼝,只要输出是HTML,就应该使⽤它来代替⽂本/模板。
这⾥的⽂档侧重于包的安全特性。有关如何⾃⾏编写模板的信息,请参阅⽂本/模板的⽂档。
介绍
该软件包包装⽂本/模板,以便您可以共享其模板API以安全地解析和执⾏HTML模板。
tmpl, err := template.New("name").Parse(...)// 错误检查已删除err = tmpl.Execute(out, data)
如果成功,tmpl 现在将是注射安全的。否则, err 是 ErrorCode ⽂档中定义的错误。
HTML模板将数据值视为应该被编码的纯⽂本,以便它们可以安全地嵌⼊到HTML⽂档中。转义是上下⽂的,因此操作可以出现在JavaScript,CSS和URI 上下⽂中。
这个包使⽤的安全模型假定模板作者是可信的,⽽ Execute 的数据参数不是。更多细节在下⾯提供。
⽰例
import "text/template"...t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!
{{end}}`)err = t.ExecuteTemplate(out, "T", "")
产⽣
Hello, !
但在HTML /模板中的上下⽂⾃动转义
import "html/template"...t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!
{{end}}`)err = t.ExecuteTemplate(out, "T", "")
产⽣安全的、转义过的HTML输出
Hello, <script>alert('you have been pwned')</script>!
上下⽂
该软件包可以理解 HTML,CSS,JavaScript和URI 。它给每个简单的操作流⽔线增加了清理功能,所以给出了摘录
{{.}}
在解析时,每个 {{.}} 都会被覆盖,以根据需要添加转义函数。在这种情况下,它变成了
{{. | htmlescaper}}
urlescaper,attrescaper和htmlescaper 是内部转义函数的别名。
错误
有关详细信息,请参阅ErrorCode的⽂档。
A fuller picture
Least Surprise Property:“熟悉HTML,CSS 和 JavaScript 的开发⼈员(或代码审查员),他们知道发⽣上下⽂⾃动转移应该能够查看{ {.}} 并正确推断出正在进⾏的清理。”
⽰例
package mainimport ("html/template""log""os")func main() {const tpl = `
html>
{{.Title}}
{{range .Items}}
{{ . }}
{{else}}
no rows
{{end}}
`
check := func(err error) {if err != nil {
log.Fatal(err)}}
t, err := template.New("webpage").Parse(tpl)check(err)
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)}
⽰例(Autoescaping)
package mainimport ("html/template""log""os")func main() {
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", "")check(err)}
⽰例(Escape)
package mainimport ("fmt""html/template""os")func main() {const s = `"Fran & Freddie's Diner" `
v := []interface{}{`"Fran & Freddie's Diner"`, ' ', ``}
fmt.Println(template.HTMLEscapeString(s))
template.HTMLEscape(os.Stdout, []byte(s))
fmt.Fprintln(os.Stdout, "")
fmt.Println(template.))
fmt.Println(template.JSEscapeString(s))
template.JSEscape(os.Stdout, []byte(s))
fmt.Fprintln(os.Stdout, "")
fmt.Println(template.))
fmt.Println(template.))}
索引
func HTMLEscape(w io.Writer, b []byte)
func HTMLEscapeString(s string) string
func HTMLEscaper(args ...interface{}) string
func IsTrue(val interface{}) (truth, ok bool)
func JSEscape(w io.Writer, b []byte)
func JSEscapeString(s string) string
func JSEscaper(args ...interface{}) string
func URLQueryEscaper(args ...interface{}) string
type CSS
error parse newtype Error
func (e *Error) Error() string
type ErrorCode
type FuncMap
type HTML
type HTMLAttr
type JS
type JSStr
type Template
func Must(t *Template, err error) *Template
func New(name string) *Template
func ParseFiles(filenames ...string) (*Template, error)
func ParseGlob(pattern string) (*Template, error)
func (t *Template) AddParseTree(name string, tree *parse.Tree) (*Template, error) func (t *Template) Clone() (*Template, error)
func (t *Template) DefinedTemplates() string
func (t *Template) Delims(left, right string) *Template
func (t *Template) Execute(wr io.Writer, data interface{}) error
func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error
func (t *Template) Funcs(funcMap FuncMap) *Template
func (t *Template) Lookup(name string) *Template
func (t *Template) Name() string
func (t *Template) New(name string) *Template
func (t *Template) Option(opt ...string) *Template
func (t *Template) Parse(text string) (*Template, error)
func (t *Template) ParseFiles(filenames ...string) (*Template, error)
func (t *Template) ParseGlob(pattern string) (*Template, error)
func (t *Template) Templates() []*Template
type URL
⽰例
Package Template (Block) Template (Glob) Template (Helpers) Template (Parsefiles) Template (Share) Package (Autoescaping) Package (Escape)
包⽂件
< js.
func HTMLEscape
func HTMLEscape(w io.Writer, b []byte)
HTMLEscape 写⼊到明⽂数据 b 的转义HTML 等价物中。
func HTMLEscapeString
func HTMLEscapeString(s string) string
HTMLEscapeString 返回纯⽂本数据的转义 HTML 等价物。
func HTMLEscaper
func HTMLEscaper(args ...interface{}) string
HTMLEscaper 返回其参数⽂本表⽰的转义 HTML 等价物。
func IsTrue
func IsTrue(val interface{}) (truth, ok bool)
IsTrue报告该值是否为'true',意味着它的类型不为零,以及该值是否具有有意义的真值。这是 if 和其他此类⾏为所使⽤的真相的定义。
func JSEscape
func JSEscape(w io.Writer, b []byte)
JSEscape写⼊ w 的纯⽂本数据 b 的逃逸 JavaScript 等价物。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论