golang标准库html/template的使用方法(未完待续)
以下样例部分来自learnku.com实战课程
模板文件里的内容
<!DOCTYPE html>
<html lang="en">
<head>
<title>创建文章 —— 咪啪咪啪</title>
<style type="text/css">.error {color: red;}</style>
</head>
<body>
<form action="{{ .URL }}" method="post">
<p><input type="text" name="title" value="{{ .Title }}"></p>
{{ with .Errors.title }}
<p class="error">{{ . }}</p>
{{ end }}
<p><textarea name="body" cols="30" rows="10">{{ .Body }}</textarea></p>
{{ with .Errors.body }}
<p class="error">{{ . }}</p>
{{ end }}
<p><button type="submit">提交</button></p>
</form>
</body>
</html>
传入模板的示例数据为
type ArticlesFormData struct {
Title, Body string
URL *url.URL
Errors map[string]string
}
{{ . }} 语句
<form action="{{ .URL }}" method="post">
上面这句话是模板body里面第一句
{{ . }}
中的点表示当前对象,当我们传入一个结构体对象的时候,我们可以使用.
来访问结构体的对应字段,同理, 当我们传入的变量是map
时,也可以在模板文件中通过.
根据key来取值
紧接着看下面这段语句
{{ with .Errors.title }}
<p class="error">{{ . }}</p>
{{ end }}
with 关键字
语法如下
{{ with pipeline }} T1 {{ end }}
如果 pipeline 为空则不产生输出,否则将.
设为pipeline的值并执行T1, 不修改外面的.{{ with pipeline }} T1 {{ else }} T0 {{ end }}
如果pipeline为空则不改变.
并执行T0,否则将.
设为pipeline的值并执行T1。
with
区块外,{{ . }}
代表传入模板的数据,而在 with
区块内,则代表 pipline 里的数据。
如 {{ with .Errors.title }}
这个区块内,{{ . }}
代表 .Errors.title
举个例子:
比如我们传入的数据为:
data := ArticlesFormData{
Title: "a",
Body: "b",
URL: storeURL,
Errors: map[string]string{
body: "内容长度需大于或等于10个字节",
title: "标题长度需介于3-40",
},
}
则上面模板解析之后会输出为
标题长度需介于3-40
因为 .Errors.title
存在,所以 .
在with作用域内就相当于 .Errors.title
, 也就是传进来的对象的title值。
pipeline
pipeline
是指产生数据的操作。比如 {{ . }} 、{{ .Name }} 等。Go的模板语法支持使用管道符 |
链接多个命令,用法和 Unix 下的管道类似 —— |
前面的命令会将运算结果(或返回值)传递给后一个命令的最后一个位置。
注意:并不是只有使用了 | 才是 pipeline。Go 的模板中,pipeline 的概念是传递数据,只要能产生数据的,都是 pipeline。
还没有任何评论,你来说两句吧