goweb-模板引擎
模板引擎
Go 为我们提供了 text/template 库和 html/template 库这两个模板引擎,模板引
擎通过将数据和模板组合在一起生成最终的 HTML,而处理器负责调用模板引擎并将引
擎生成的 HTMl 返回给客户端。
Go 的模板都是文本文档(其中 Web 应用的模板通常都是 HTML),它们都嵌入了
一些称为动作的指令。从模板引擎的角度来说,模板就是嵌入了动作的文本(这些文本
通常包含在模板文件里面),而模板引擎则通过分析并执行这些文本来生成出另外一些
文本。
HelloWorld
使用 Go 的 Web 模板引擎需要以下两个步骤:
(1) 对文本格式的模板源进行语法分析,创建一个经过语法分析的模板结构,其中
模板源既可以是一个字符串,也可以是模板文件中包含的内容。
(2 )执行经过语法分析的模板,将 ResponseWriter 和模板所需的动态数据传递给模
板引擎,被调用的模板引擎会把经过语法分析的模板和传入的数据结合起来,生成出最
终的 HTML,并将这些 HTML 传递给 ResponseWriter。
下面就让我们写一个简单的 HelloWorld
- 创建模板文件 hello.html
<html>
<head>
<title>模板文件</title>
<meta charset="utf-8" />
</head>
<body>
//嵌入动作 {{.}}
</body>
</html>
- 在处理器中触发模板引擎
func handler(w http.ResponseWriter, r *http.Request) {
//解析模板文件
t, _ := template.ParseFiles("hello.html")
//执行模板
t.Execute(w, "Hello World!")
}
- 浏览器中的结果
Hello World!
解析模板
- 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"))
- ParseGlob 函数
通过该函数可以通过指定一个规则一次性传入多个模板文件,如:
t, _ := template.ParseGlob("*.html")
执行模板
- 通过 Execute 方法
如果只有一个模板文件,调用这个方法总是可行的;但是如果有多个模板
文件,调用这个方法只能得到第一个模板
- 通过 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 中显示")
goweb-模板引擎的更多相关文章
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- Handlebars 模板引擎之前后端用法
前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...
- 推荐13款javascript模板引擎
javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...
- JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- DotLiquid模板引擎简介
DotLiquid是一个在.Net Framework上运行的模板引擎,采用Ruby的Liquid语法,这个语法广泛的用在Ruby on rails和Django等网页框架中. DotLiquid相比 ...
- doT js 模板引擎【初探】要优雅不要污
js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...
- 浅谈 Web 中前后端模板引擎的使用
前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...
- JavaScript模板引擎artTemplate.js——结语
再次首先感谢模板的作者大神,再次放出github的地址:artTemplate性能卓越的js模板引擎 然后感谢博客园的一位前辈,他写的handlebars.js模板引擎教程,对我提供了很大的帮助,也是 ...
- Javascript最简单的模板引擎
非常简单,性能估计一般,方法最原始. //第一代模板引擎 //只支持{{key}}的替换,不支持语句 //支持Object和Array对象 function template_setdata(temp ...
- Javascript模板引擎插件收集
为什么要用JS的模板引擎,打个比方,如果你要通过接口绑定数据,最终要加进去DOM中,我们普遍的做法就是不断的+,最终append进去,但是这样的做法就是后续人员压根就没法维护.所以这时模板引擎出来了. ...
随机推荐
- 开源DDD设计模式框架YMNNetCoreFrameWork第三篇-增加ASp.net core Identity身份认证,JWT身份认证
1.框架增加Identity注册功能 2.框架增加identity登录以后获取JWTtoken 3.请求接口通过token请求,增加验证特性 源代码地址:https://github.com/topg ...
- Machine Learning Note Phase 1( Done!)
Machine Learning 这是第一份机器学习笔记,创建于2019年7月26日,完成于2019年8月2日. 该笔记包括如下部分: 引言(Introduction) 单变量线性回归(Linear ...
- 【CF1154G】Minimum Possible LCM
题意 给你 \(n\) 个数 \(a_i\) ,求出 \(\text{lcm}\) 最小的一对数. \(n\le 10^6, a_i\le 10^7\) 题解 直接枚举 ,找到当前数最小的两个倍数,统 ...
- Python pip设置为清华镜像
设置为默认镜像 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- VUE中常用的一些方法
1.获取URL中的参数 export function getUrlKey(name) { return decodeURIComponent((new RegExp('[?|&]' + na ...
- Python 自省指南
原作者:Patrick K. O'Brien 什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生 ...
- JAVAEE 和项目开发(第五课:服务器软件的介绍)
Web服务器根据对javaEE支持的能力分为两大类 1,JavaEE服务器(应用服务器) 1) IBM公司 WebSphere 2) BEA公司 WebLogic 3) JBoss 公司 JBoss ...
- <mvc:default-servlet-handler />说明
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:字符串
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- c++的符号表的肤浅认识
符号表是编译期产生的一个hash列表,随着可执行文件在一起 示例程序 int a = 10; int b; void foo(){ static int c=100; } int main(){ in ...