欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  Go为我们提供了text/template库和html/template库这两个模板引擎,模板引擎通过将数据和模板组合在一起生成最终的HTML,而处理器负责调用模板引擎并将引擎生成的HTMl返回给客户端。
 
  Go的模板都是文本文档(其中Web应用的模板通常都是HTML),它们都嵌入了一些称为动作的指令。从模板引擎的角度来说,模板就是嵌入了动作的文本(这些文本通常包含在模板文件里面),而模板引擎则通过分析并执行这些文本来生成出另外一些文本。
 
  使用Go的Web模板引擎需要以下两个步骤:
 
  (1) 对文本格式的模板源进行语法分析,创建一个经过语法分析的模板结构,其中模板源既可以是一个字符串,也可以是模板文件中包含的内容。
 
  (2 )执行经过语法分析的模板,将ResponseWriter和模板所需的动态数据传递给模板引擎,被调用的模板引擎会把经过语法分析的模板和传入的数据结合起来,生成出最终的HTML,并将这些HTML传递给ResponseWriter。
 
  1、创建模板文件hello.html
 
  2、在处理器中触发模板引擎
 
  3、 浏览器中的结果
 
  1、ParseFiles函数
 
  当我们调用ParseFiles函数解析模板文件时,Go会创建一个新的模板,并将给定的模板文件的名字作为新模板的名字,如果该函数中传入了多个文件名,那么也只会返回一个模板,而且以第一个文件的文件名作为模板的名字,至于其他文件对应的模板则会被放到一个map中。让我们再来看一下HelloWorld中的代码:
 
  以上代码相当于调用New函数创建一个新模板,然后再调用template的ParseFiles方法:
 
  以上方法在解析模板时都没有对错误进行处理,Go提供了一个Must函数专门用来处理这个错误。Must函数可以包裹起一个函数,被包裹的函数会返回一个指向模板的指针和一个错误,如果错误不是nil,那么Must函数将产生一个panic。
 
  Must函数代码
 
  2、 ParseGlob函数
 
  通过该函数可以通过指定一个规则一次性传入多个模板文件,如:
 
  1、 通过Execute方法
 
  如果只有一个模板文件,调用这个方法总是可行的;但是如果有多个模板文件,调用这个方法只能得到第一个模板
 
  2、通过ExecuteTemplate方法
 
  例如:
 
  变量t就是一个包含了两个模板的模板集合,第一个模板的名字是hello.html,第二个模板的名字是hello2.html,如果直接调用Execute方法,则只有模板hello.html会被执行,如何想要执行模板hello2.html,则需要调用ExecuteTemplate方法
 
  t.ExecuteTemplate(w, “hello2.html”, “我要在hello2.html中显示”)
 
  Go模板的动作就是一些嵌入到模板里面的命令,这些命令在模板中需要放到两个大括号里{{ 动作 }},之前我们已经用过一个很重要的动作:点(。),它代表了传递给模板的数据。下面我们再介绍几个常用的动作,如果还想了解其他类型的动作,可以参考text/template库的文档。
 
  1、条件动作
 
  格式一:
 
  格式二:
 
  其中的arg是传递给条件动作的参数,该值可以是一个字符串常量、一个变量、一个返回单个值的函数获取方法等。
 
  案例:
 
  模板文件
 
  处理器端代码
 
  浏览器中的结果
 
  2、迭代动作
 
  迭代动作可以对数组、切片、映射或者通道进行迭代。
 
  格式一:
 
  格式二:
 
  range后面的点代表被遍历的元素;要显示的内容里面的点代表遍历到的元素
 
  案例:
 
  模板文件
 
  处理器端代码
 
  浏览器中的结果
 
  如果迭代之后是一个个的结构体,获取结构体中的字段值使用 .字段名 方式获取
 
  迭代Map时可以设置变量,变量以$开头:
 
  迭代管道
 
  c1、c2和c3可以是参数或者函数。管道允许用户将一个参数的输出传递给下一个参数,各个参数之间使用 | 分割。
 
  3、设置动作
 
  设置动作允许在指定的范围内对点设置值。
 
  格式一:
 
  格式二:
 
  案例:
 
  模板文件
 
  处理器端代码
 
  浏览器中的结果
 
  4、包含动作
 
  包含动作允许用户在一个模板里面包含另一个模板,从而构建出嵌套的模板。
 
  格式一:
 
  name为被包含的模板的名字
 
  格式二:
 
  arg是用户想要传递给被嵌套模板的数据
 
  案例:
 
  模板文件
 
  hello.html
 
  hello2.html
 
  处理器端代码
 
  注意:在解析模板文件时,当前文件以及被包含的文件都要解析。
 
  浏览器中的结果
 
  5、定义动作
 
  当我们访问一些网站时,经常会看到好多网页中有相同的部分:比如导航栏、版权信息、联系方式等。这些相同的布局我们可以通过定义动作在模板文件中定义模板来实现。定义模板的格式是:以{{ define “layout” }}开头,以{{ end }}结尾。
 
  1) 在一个模板文件(hello.html)中定义一个模板
 
  2)在一个模板文件中定义多个模板
 
  模板文件(hello.html)
 
  处理器端代码
 
  注意:需要调用ExecuteTemplate方法并指定模板的名字
 
  浏览器中的结果
 
  3) 在不同的模板文件中定义同名的模板
 
  模板文件
 
  hello.html
 
  content1.html
 
  content2.html
 
  处理器端代码
 
  浏览器中的结果
 
  6、块动作
 
  Go 1.6引入了一个新的块动作,这个动作允许用户定义一个模板并立即使用。相当于设置了一个默认的模板

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h61558.shtml