IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Go语言标准库之http/template详解2 -> 正文阅读

[网络协议]Go语言标准库之http/template详解2

模板继承

我们在写前端页面的时候的,有些东西会大量重复的进行编写,例如导航栏,分页栏等等,这些统一的东东,我们可以将他抽取出来作为模板文件,通过继承的方式来省略。

这里我们用index页面,和home页面作为例子来讲解下

在这里插入图片描述

  • 假设这是首页页面,home页面也会是这个,只是内容不一样,样式一模一样,
  • 我们就需要使用到模板来进行一个抽取。方便我们代码的省略

三步走

  1. 定义模板
    将index页面和home页面相同的部分抽取到base.tmpl文件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>首页</title>
    <style>
        。。。。。  // 所有的样式,这里省略了哈
    </style>
</head>
<body>
<div class="nav"></div>
<div class="main">
    <div class="menu"></div>
    <div class="content center">
        {{block "content" .}}{{end}}   // 只有这里发生了改变
    </div>
</div>
</body>
</html>
  • 然后建立index页面和home页面,套用base模板

在这里插入图片描述

  • 那个点记得加上去哈,不然数据传输不过来的。
  • index页面同理。
  1. 解析模板
    主要通过ParseFiles函数,进行一个解析,注意的是,以前我们需要写一个tmpl,当出现有抽取模板的时候的,我们需要写两个模板,第一个就是抽取的模板,第二个就是需要进行渲染的模板。
t,err := template.ParseFiles("base.tmpl","home.tmpl")
  1. 渲染模板
    渲染模板跟原来的也有点不同,以前将数据投放入w即可,现在还需要指定模板的参数。
	err = t.ExecuteTemplate(w,"home.tmpl",name)
  • 记得扩展名也要哈。

在这里插入图片描述

  • 这样就可以进行模板的套用拉。

修改默认的标识符

  • 这个小知识可以看下哈,要知道我们在编写前端框架的时候,我们也需要进行使用 . 的一个标识符,比如vue框架等等。
  • 这个时候我们不改变的话,就会起冲突哈,所以我们就需要修改默认的标识符,
  • 我们来举一个例子。
template.New("index.tmpl").Delims("{[","]}").ParseFiles("Template_test/index.tmpl")

在这里插入图片描述

在这里插入图片描述

  • 这样就完成了默认字符的修改了哈,只需要使用固定的方法进行修改即可。

在这里插入图片描述

text/template与html/tempalte的区别

  • 我们现在用的都是html包满,这个非常安全的!
  • html/template针对的是需要返回HTML内容的场景,在模板渲染过程中会对一些有风险的内容进行转义,以此来防范跨站脚本攻击。例如 html注入

这里我们设置一个js语句和html语句来投入进行

在这里插入图片描述

  • 可以看到哈,相当险恶哈,如果没有转义的话就会打印 嘿嘿嘿

在这里插入图片描述

  • 但是由于我们使用的 html/template 这个包,所以语句我们都是安全的,不存在这种情况,如果是 text/template包那就难搞哦!

这个时候肯定会有人说,我就是要进行转义呢,怎么办?

  • 办法也简单,我们自己整个自定义函数即可拉!

在这里插入图片描述

  • 添加自定义函数的方法在前面的文章有说过哈。
  • 使用方法也很简单

在这里插入图片描述

  • 这样通过管道 | 把数据传给函数即可,来看看效果吧

在这里插入图片描述

在这里插入图片描述

  • 可以看到哈,先打印了之后又变成了超链接了。
  • 全部都进行转义了哈。啊哈哈哈哈哈哈

代码奉上

package main

import (
	"fmt"
	"html/template"
	"net/http"
)

type User struct {
	Name string
	Gender string
	Age int
}

func index(w http.ResponseWriter, r *http.Request)  {
	// 解析模板
	t, err := template.New("index1.tmpl").Delims("{[","]}").
		Funcs(template.FuncMap{
		"safe" : func(s string) template.HTML{
			return template.HTML(s)
		},
	}).ParseFiles("Template_test/index1.tmpl")
	if err != nil {
		fmt.Println("Parse template failed! err:",err)
		return
	}
	// 渲染模板
	u1 := User{
		Name:"小公主",
		Gender:"女",
		Age:16,
	}

	m1 := map[string]interface{}{
		"name":"小皇子",
		"gender":"男",
		"age" : 18,
	}

	hobbyList := []string{
		"篮球",
		"足球",
		"双色球",
	}
	jsStr := `<script>alert('嘿嘿嘿')</script>`
	demo := `<a href="https://blog.csdn.net/qq_43514659/article/details/121362804?spm=1001.2014.3001.5501">带你去看模板详解</a>`

	err = t.Execute(w,map[string]interface{}{
		"u1":u1,
		"m1":m1,
		"hobbyList":hobbyList,
		"jsStr":jsStr,
		"demo":demo,
	})
	if err != nil {
		fmt.Println("render template failed,err : ",err)
		return
	}

}

func main() {
	http.HandleFunc("/index",index)
	err := http.ListenAndServe(":9090",nil)
	if err != nil {
		fmt.Println("HTTP server start failed! err : ", err)
		return
	}
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:30:16  更:2021-11-18 11:30:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 22:06:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码