相关文章推荐
健壮的墨镜  ·  Invoke-WebRequest ...·  1 年前    · 
逃课的毛豆  ·  告别 Windows ...·  2 年前    · 
暴躁的奔马  ·  Setting up Conda and ...·  2 年前    · 

库(html/template):

是go实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。简单说就是对html,css,javascript进行安全转换;例如对html中的 <div> 这个标签的特殊字符<>进行转换。还有用于生成安全的html模版代码的方法。

与之相似还有另一个包 text/template,只是前者解析html,后者解析普通文本字符串而已。

常见的几个html转义字符:
在这里插入图片描述

package main
import (
	"fmt"
	"html"
	"html/template"
func main() {
	//html片段的转义方法:
	//func HTMLEscapeString(s string) string  :  返回s的HTML转义等价表示字符串。
	//func HTMLEscaper(args ...interface{}) string :  返回所有多个参数文本表示的HTML转义等价表示字符串
	//func HTMLEscape(w io.Writer, b []byte) :  向w中写入b的HTML转义等价表示
	s := template.HTMLEscapeString("<div>hello</div>")
	fmt.Println(s)  //&lt;div&gt;hello&lt;/div&gt;
	s = template.HTMLEscaper("<div>","hello","</div>")
	fmt.Println(s)  //&lt;div&gt;hello&lt;/div&gt;
	// template.HTMLEscape() // 这个方法将html转义后的片段写入到w可写流
	//对javascript代码转义的方法
	//func JSEscapeString(s string) string : 返回s的JavaScript转义等价表示字符串。
	//func JSEscaper(args ...interface{}) string : 返回多个参数文本表示的JavaScript转义等价表示字符串。
	//func JSEscape(w io.Writer, b []byte) : 向w中写入b的JavaScript转义等价表示。
	s1 := template.JSEscapeString("var a = 'hello'")
	fmt.Println(s1)  //var a \x3D \'hello\'
	s1 = template.JSEscaper("var"," a = ","'hello'")
	fmt.Println(s1)  //var a \x3D \'hello\'
	// template.JSEscape() // 这个方法将javascript代码转义后的片段写入到w可写流,不再演示
	//对url转义的方法:
	//func URLQueryEscaper(args ...interface{}) string  : 返回多个参数文本表示的可以嵌入URL查询的转义等价表示字符串
	s2 := template.URLQueryEscaper("name=go&age=10")
	fmt.Println(s2)    //name%3Dgo%26age%3D10
	// 可以看到 URLQueryEscaper 方法是将字符转为其ASCII码表的值;= 的ASCII码为3D,这里跟html包的EscapeString有些不同,看下面一行代码:
	fmt.Println(html.EscapeString("name=go&age=10"))   // name=go&amp;age=10
	// html.EscapeString是将其特殊字符转为html特殊字符转义表对应的字符;= 为&amp
	//templdate包提供的可生成安全的(防注入)html模版代码的方法
	//func New(name string) *Template : 新建名为name的一个模版
	//func (t *Template) Parse(src string) (*Template, error)  : 解析src为模版的内容
	//func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error  :  解析name模版,将其应用到data数据上,解析后的结果写入到wr可写流
	//func (t *Template) Execute(wr io.Writer, data interface{}) error  :  直接将数据应用到模版,没有模版名字。
	// 创建一个模版,并解析内容;{{define "T"}} 意思是定义一个名为T的模版,必须用字符串抱起来,否则报错,
	// {{.}}为应用到模版上的数据,{{end}}表示模版解析结束,也必须要有;
	temp,_ := template.New("foo").Parse(`{{define "T"}} hello {{.}}{{end}}`)
	// 将数据应用到模版上,然后将内容输出到标准输出。
	temp.ExecuteTemplate(os.Stdout,"T","<div>go</div>") // hello &lt;div&gt;go&lt;/div&gt;
	// 可以看到,将{{.}}内容替换为了对应的html片段,同时html片段也进行了特殊字符的转义
	fmt.Println()
	// 直接创建一个模版
	temp1,_ := template.New("foo").Parse(`hello {{.}}`)
	// 将数据应用到模版上,然后将内容输出到标准输出。
	temp1.Execute(os.Stdout,"<div>go</div>") //  hello &lt;div&gt;go&lt;/div&gt;
	// 可以看到,将{{.}}内容替换为了对应的html片段,同时html片段也进行了特殊字符的转义
	//html模版的其它方法:
	//func (t *Template) ParseFiles(filenames ...string) (*Template, error) =》解析filenames指定的文件里的模板。如果发生错误,会停止解析并返回nil,否则返回(t, nil)。至少要提供一个文件。Parse方法直接传入字符串模版,ParseFiles从文件中读取,本质上没有区别。
模板,可在Go,HTML和脚本中构建动态Web应用程序。
为什么 ?
 大多数情况下,使用您已经知道的工具(Go,HTML,CSS,Vanilla Javascript)构建动态网站。
 使用可加快响应式和美观UI的原型制作速度。
 大部分互动都使用 。
 对于真正复杂的交互,请在几个地方为单个div使用 。
 轻巧而富有成效。 快速的开发周期。
 易于启动,易于维护。
 有关使用此技术的更完整实现,请参阅 。
git clone https://github.com/<user>/<mytemplate>和cd /path/to/your/gomodest-template
 make watch (开始热重新加载go,html和javascript更改)
brew install gh
gh repo create myapp --tem
                                    苦恼好几天了,不知道如何根据模板template.html优雅的生成美观的静态 HTML,无奈最后选择 Jinja2进行后端渲染,只能凑合用吧?这里为了演示,就简单也一个意思一下,  大家根据根据需要编写自己的逻辑。app.py 和template.html放在同一目录下, 运行后输出 result.html文件。2. Jinja2后端渲染。1. 编辑前端模板页面。
                                    Blocks是一个基于html / template的简单Go惯用视图引擎Blocks Blocks是一个基于html / template的简单Go惯用视图引擎,另外还具有以下功能:通过go-bindata嵌入的模板为可选的上下文加载取消在开发阶段重新加载模板完整布局和块支持Markdown内容全局FuncMap安装唯一的要求是Go编程语言。
$ go获取github.com/kataras/blocks入门创建一个名为./views的文件夹,并放置一些HTML模板文件。
│main.go└───
	Aerial by HTML5 UP
	html5up.net | @n33co
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
Printf也可以做到输出格式化,当然,对于简单的例子来说足够了,但是我们有时候还是需要复杂的输出格式,甚至需要将格式化代码分离开来。这时,可以使用text/templatehtml/template。
两个模板库: text/templatehtml/template 。这两个库类似,当需要输出html格式的代码时需要使用html/template。
index.html 文件
                                    这里说的是go 语言中自带的包html/template里的一些基本操作
当然还有text/template,也是个模板包,但是这个并不是网页安全的,如果 往模板上传的是标签,它是会将标签转成html格式的,这一般来说是不允许的。
在本博客中所有的例子都是经过go build,打包成可执行文件执行的,如果使用goland启动标志其中会导致找不到包而报错。如果过真的想用启动标志启动,建议改下解析文件模板的路径。
例子码云地址:go-templateLearn
目录注释变量的使用判断与清楚空白符操作判断去空白字
                                    import "html/template"概述索引示例概观模板包(html/template)实现了数据驱动的模板,以便在代码注入过程中安全地生成HTML输出。它提供了与包文本/模板相同的接口,只要输出是HTML,就应该使用它来代替文本/模板。这里的文档侧重于包的安全特性。有关如何自行编写模板的信息,请参阅文本/模板的文档。介绍该软件包包装文本/模板,以便您可以共享其模板API以安全地解析和执行...
                                    HTML <template> 标签用于保存在页面加载时不会呈现的客户端内容,但可以在运行时使用 JavaScript 对其进行实例化。
模板的内容在没有使用 JavaScript 激活之前不会显示。浏览器在加载页面时会处理 <template> 元素的内容,以确保内容有效,但不会呈现内容。
当您想在 HTML 文档中多次使用相同的内容而不进行任何更改时,它也很有用。
<template> 标签可以放置在 <head>、<body>、<
                                    本篇教程介绍了HTML+CSS入门 template包详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。<template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。main.gopackagemainimport("ht...
                                    template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。main.gopackage mainimport ("html/template""io/ioutil""os""time""fmt")func main() {t := template....
                                    vue实例绑定的元素内部的template标签不支持v-show指令,即v-show="false"对template标签来说不起作用。将实例中template属性值进行编译,并将编译后的dom替换掉vue实例绑定的元素,如果该vue实例绑定的元素中存在内容,这些内容会直接被覆盖。// el:'#root', //组件定义时,一定不要写el配置项,因为最终所有的组件都要被一个vm管理,由vm决定服务于哪个容器。标签在页面加载时该标签中的内容不会显示。元素,但是查看后台dom结构存在template标签。