zoukankan      html  css  js  c++  java
  • goweb-模板引擎

    模板引擎

    Go 为我们提供了 text/template 库和 html/template 库这两个模板引擎,模板引
    擎通过将数据和模板组合在一起生成最终的 HTML,而处理器负责调用模板引擎并将引
    擎生成的 HTMl 返回给客户端。

    Go 的模板都是文本文档(其中 Web 应用的模板通常都是 HTML),它们都嵌入了
    一些称为动作的指令。从模板引擎的角度来说,模板就是嵌入了动作的文本(这些文本
    通常包含在模板文件里面),而模板引擎则通过分析并执行这些文本来生成出另外一些
    文本。

    HelloWorld

    使用 Go 的 Web 模板引擎需要以下两个步骤:

    (1) 对文本格式的模板源进行语法分析,创建一个经过语法分析的模板结构,其中
    模板源既可以是一个字符串,也可以是模板文件中包含的内容。

    (2 )执行经过语法分析的模板,将 ResponseWriter 和模板所需的动态数据传递给模
    板引擎,被调用的模板引擎会把经过语法分析的模板和传入的数据结合起来,生成出最
    终的 HTML,并将这些 HTML 传递给 ResponseWriter。

    下面就让我们写一个简单的 HelloWorld

    1. 创建模板文件 hello.html
    <html>
      <head>
        <title>模板文件</title>
        <meta charset="utf-8" />
      </head>
      <body>
        //嵌入动作 {{.}}
      </body>
    </html>
    
    1. 在处理器中触发模板引擎
    func handler(w http.ResponseWriter, r *http.Request) {
    //解析模板文件
    t, _ := template.ParseFiles("hello.html")
    //执行模板
    t.Execute(w, "Hello World!")
    }
    
    1. 浏览器中的结果
      Hello World!

    解析模板

    1. ParseFiles 函数

    当我们调用 ParseFiles 函数解析模板文件时,Go 会创建一个新的模板,
    并将给定的模板文件的名字作为新模板的名字,如果该函数中传入了多个
    文件名,那么也只会返回一个模板,而且以第一个文件的文件名作为模板
    的名字,至于其他文件对应的模板则会被放到一个 map 中。让我们再来
    看一下 HelloWorld 中的代码:

    t, _ := template.ParseFiles("hello.html")

    以上代码相当于调用 New 函数创建一个新模板,然后再调用 template 的
    ParseFiles 方法:

    t := template.New("hello.html")
    t, _ = t.ParseFiles("hello.html")
    

    我们在解析模板时都没有对错误进行处理,Go 提供了一个 Must 函数专
    门用来处理这个错误。Must 函数可以包裹起一个函数,被包裹的函数会
    返回一个指向模板的指针和一个错误,如果错误不是 nil,那么 Must 函数
    将产生一个 panic。

    实验 Must 函数之后的代码

    t := template.Must(template.ParseFiles("hello.html"))

    1. ParseGlob 函数

    通过该函数可以通过指定一个规则一次性传入多个模板文件,如:

    t, _ := template.ParseGlob("*.html")

    执行模板

    1. 通过 Execute 方法

    如果只有一个模板文件,调用这个方法总是可行的;但是如果有多个模板
    文件,调用这个方法只能得到第一个模板

    1. 通过 ExecuteTemplate 方法

    例如:

    t, _ := template.ParseFiles("hello.html", "hello2.html")

    变量 t 就是一个包含了两个模板的模板集合,第一个模板的名字是
    hello.html,第二个模板的名字是 hello2.html,如果直接调用 Execute 方法,
    则只有模板 hello.html 会被执行,如何想要执行模板 hello2.html,则需要
    调用 ExecuteTemplate 方法

    t.ExecuteTemplate(w, "hello2.html", "我要在 hello2.html 中显示")

  • 相关阅读:
    史上最简单的Hibernate入门简单介绍
    极客Web前端开发资源大荟萃
    ios7 UIScrollView 尺寸问题
    用ahk脚本自己主动删除flashcookies
    CSS文字样式
    Windows 10 安装
    万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》
    算法实验 层序列表问题(二叉树)
    git配置别名
    git忽略特殊文件
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12182639.html
Copyright © 2011-2022 走看看