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

相关文章
|
6天前
|
安全 Go
Golang深入浅出之-Go语言模板(text/template):动态生成HTML
【4月更文挑战第24天】Go语言标准库中的`text/template`包用于动态生成HTML和文本,但不熟悉其用法可能导致错误。本文探讨了三个常见问题:1) 忽视模板执行错误,应确保正确处理错误;2) 忽视模板安全,应使用`html/template`包防止XSS攻击;3) 模板结构不合理,应合理组织模板以提高可维护性。理解并运用这些最佳实践,能提升Go语言模板编程的效率和安全性,助力构建稳健的Web应用。
28 0
|
6天前
|
移动开发 前端开发 HTML5
HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码
HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码
|
6天前
|
移动开发 JavaScript 前端开发
【专栏:HTML进阶篇】HTML模板与Web组件:可复用的网页元素
【4月更文挑战第30天】HTML模板和Web组件提升网页开发效率和可维护性。HTML模板,如&lt;template&gt;元素和服务器端模板引擎,用于创建可复用的HTML结构。Web组件是自定义的HTML元素,结合影子DOM和模板,实现封装的可重用组件。两者助力构建高效、现代的网页和网站。
|
6天前
|
安全 Go
Golang深入浅出之-Go语言标准库中的文件读写:io/ioutil包
【4月更文挑战第27天】Go语言的`io/ioutil`包提供简单文件读写,适合小文件操作。本文聚焦`ReadFile`和`WriteFile`函数,讨论错误处理、文件权限、大文件处理和编码问题。避免错误的关键在于检查错误、设置合适权限、采用流式读写及处理编码。遵循这些最佳实践能提升代码稳定性。
24 0
|
6天前
|
安全 Go 开发者
Golang深入浅出之-Go语言模板(text/template):动态生成HTML
【4月更文挑战第25天】Go语言的`text/template`和`html/template`库提供动态HTML生成。本文介绍了模板基础,如基本语法和数据绑定,以及常见问题和易错点,如忘记转义、未初始化变量、复杂逻辑处理和错误处理。建议使用`html/template`防止XSS攻击,初始化数据结构,分离业务逻辑,并严谨处理错误。示例展示了条件判断和循环结构。通过遵循最佳实践,开发者能更安全、高效地生成HTML。
25 0
|
6天前
|
机器人
机器人飞船404页面模板HTML源码
机器人飞船404页面模板HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
27 5
机器人飞船404页面模板HTML源码
|
6天前
|
移动开发 HTML5
HTML5/CSS3粒子效果进度条代码
HTML5/CSS3进度条应用。这款进度条插件在播放进度过程中出现粒子效果,就像一些小颗粒从进度条上散落下来
19 0
HTML5/CSS3粒子效果进度条代码
|
6天前
|
移动开发 前端开发 JavaScript
:掌握移动端开发:HTML5 与 CSS3 的高效实践
:掌握移动端开发:HTML5 与 CSS3 的高效实践 “【5月更文挑战第6天】”
27 1
|
6天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
6天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。