Go语言之自定义模板,引用多个模板html文件嵌套使用

简介: Go语言之自定义模板,引用多个模板html文件嵌套使用

制作流程:

1、同样是先定义一个处理接口/tmpl,当访问到http://ip:9090/tmpl时,会处理ti函数

1675180779051.jpg

2、定义t1函数,这个函数解析了两个模板1.tmpl 2.tmpl,这里需要注意的是第一个模板是父模板,其中包含了第二个模板,所以第一个模板必须先写

1675180797438.jpg

3、1.tmpl使用define函数生成了一个内部模板,而2.tmpl是与1.tmpl同一目录级别的文件。这里只是引申一下define知识点

目录结构:

main.go
1.tmpl
2.tmpl
p6.tmpl

main.go内容

package main
import (
  "fmt"
  "html/template"
  "net/http"
)
func f1(w http.ResponseWriter, r *http.Request) {
  //嵌套一个函数,要么赋值一个,要么第二个值必须是error
  k := func(name string) (string, error) {
    return name + "Gin框架", nil
  }
  //定义模板
  //在p6.tmpl编辑
  //解析模板
  t := template.New("p6.tmpl") //定义一个新的模板名称为p6.tmpl
  t.Funcs(template.FuncMap{    //固定函数格式
    "kua": k, //自定义“kua”必须与同级目录p6.tmpl文件引用的一致
  })
  _, err := t.ParseFiles("./p6.tmpl") //使用ctrl得知,这里需要两个返回值,所以赋值两个
  if err != nil {                     //错误处理
    fmt.Printf("parse template failed,err%v", err)
    return
  }
  name := "Go语言" //声明值
  //渲染模板
  t.Execute(w, name) //w代表写入,name对应同级目录p6.tmpl文件中的点.
}
func t1(w http.ResponseWriter, r *http.Request) {
  //定义模板
  //解析模板
  t, err := template.ParseFiles("./1.tmpl", "./2.tmpl")
  if err != nil {
    fmt.Printf("parse template failed,err%v", err)
    return
  }
  //渲染模板
  name := "GO语言嵌套模板使用"
  t.Execute(w, name)
}
func main() {
  http.HandleFunc("/", f1) //当请求到/根目录时,处理f1函数
  http.HandleFunc("/tmpl", t1)
  err := http.ListenAndServe(":9000", nil) //监听9000端口号
  if err != nil {                          //错误处理
    fmt.Println("HTTP server start failed, err:%v", err)
    return
  }
}

1.tmpl内容

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>自定义嵌套模板函数</title>
</head>
<body>
{{/*template 引用模板文件*/}}
{{template "2.tmpl"}}
{{/*hr代表中横线*/}}
<hr>
{{template "11.tmpl"}}
<hr>
{{/*.代表go代码中的name会传输进来*/}}
{{ . }}
</body>
</html>
{{/*define自定义内部模板*/}}
{{define "11.tmpl"}}
<ol>
    <li>吃饭</li>
    <li>睡觉</li>
    <li>打豆豆</li>
</ol>
{{end}}

2.tmpl内容

<ul>
    <li>吃饭</li>
    <li>睡觉</li>
    <li>打豆豆</li>
</ul>

p6.tmpl内容

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>自定义模板函数</title>
</head>
<body>
{{ kua . }}
</body>
</html>

运行程序:

go run main.go

浏览器访问:

http://ip:9000/tmpl

1675180886076.jpg

相关文章
|
9月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
419 2
|
11月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
639 0
|
11月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
465 0
|
11月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
499 0
|
Web App开发 移动开发 HTML5
20款高质量的 HTML5 网站模板【免费下载】
  下面的列表集合了20款高质量的免费 HTML5 网站模板,这些专业的模板能够让你的网站吸引很多的访客。这些免费的 HTML5 模板虽然不是响应式的,不过都很实用。赶紧来看看。 您可能感兴趣的相关文章 Web 前端开发人员和设计师必读文章集锦 经典网页设计:25个应用视差滚动单页网站 ...
1425 0
|
移动开发 JavaScript 前端开发
17款漂亮的 HTML5 网站模板免费下载
  在过去的几年,设计师们已开始关注和使用 HTML5 了,如今 HTML5 得到了更加广泛的应用。今天,本文与大家分享17款免费的 HTML5 网站模板,看看有没自己喜欢的。 1- Smart Net 免费下载 2- Photo Art 免费下载 3- The Art Of Busine...
1072 0
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
912 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
817 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子