Go语言中的gin框架学习模版渲染(三)

在Gin框架中,可以使用多种模板引擎来渲染数据。本篇文章以使用HTML/HTML5作为模板语言的方式来进行介绍。

  1. 安装gin框架和模板引擎

首先需要安装Gin框架和HTML/HTML5模板引擎。可以使用以下命令来安装:

复制代码go get -u github.com/gin-gonic/gin
go get -u github.com/gin-gonic/gin/render
  1. 创建模板文件

在项目中创建一个templates文件夹,用于存放HTML模板文件。在该文件夹中,

 目录结构,如上图所示: 

创建一个templates/default/index.html文件,示例如下:

{{ define "default/index.html" }}
<!DOCTYPE html>
<html>
<head>
    <title>Welcome to my site</title>
</head>
<body>
    <h1>Welcome to my site</h1>
    <p>My name is {{.Name}}, and I am {{.Age}} years old.</p>
</body>
</html>

{{end}}
  1. 创建路由

在main.go文件中创建路由,使用Gin框架中的HTMLRender方法来渲染HTML模板文件。示例如下:

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

type Article2 struct {
	Title   string `json:"title"`
	Content string `json:"content"`
}

type Article struct {
	Title   string
	Content string
}

func main() {
	// 定义一个路由引擎
	r := gin.Default()

	// 加载 渲染模版

	// 当templates/目录下有多个层级目录当如何呢  我们可以在template/**/*这样的模式下 这里 【 /**/ 】代表了一层级目录结构,多层级可以加入多个 /**/**/* 当然最后肯定是单个*号结束的
	// 这里我们创建一个前端目录 default,以及 一个 后管目录 admin
	r.LoadHTMLGlob("*templates/**/*")


	// 创建 路由

	r.GET("/", func(ctx *gin.Context) {

		new := &Article{
			Title:   "admin/index",
			Content: "这是一个首页后台管理",
		}
		ctx.HTML(http.StatusOK, "default/index.html", gin.H{
			"title": "首页",
			"news":  new,
			"score": 100,
			"list":  []string{"吃饭", "睡觉", "写代码"}, // 数组
			"scoreList": []interface{}{
				&Article{
					Title:   "新闻一",
					Content: "新闻内容11111",
				},
				&Article{
					Title:   "新闻二",
					Content: "新闻内容2222",
				},
			},
		})

	})

	//启动服务
	r.Run(":8001")
}
在路由中,使用c.HTML方法来渲染HTML模板文件。其中,第一个参数是HTTP状态码;第二个参数是模板文件名;第三个参数是渲染数据,可以是一个map或struct。
  1. 运行程序

在终端中进入项目目录,使用以下命令来运行程序:

复制代码go run main.go

打开浏览器,访问http://localhost:8080/,即可看到模板文件中的内容已经成功渲染出来了。

gin模板的基本语法:

1.{{.}} 输出数据

常用的模版渲染肯定需要输出后端路由带出的数据源,所以,在前端静态页面也就是html页面使用{{ .Title }} 这样的方式输出数据;其中的 点后面的参数变量名,是由服务端定义好的变量名称。

当然,有的人说,我也写了怎么没有渲染啊,怎么报错啊这类型的错误问题;可以参考我的写的问题集合,基本上新手,都是语法或者,写法有问题!!!

2.变量

这里的变量就是你想的那种,变量;先定义一个变量名字,承接你需要表达的复杂变量名称;类似于 var  a := .new 这样的一个操作;

3. 移除空格

这个没有多少说的,很多框架都有类似的操作,只是gin框架的去掉 空格是 {{- .new -}}

4.条件判断 if else

这里就是在判断时候写法不一样,本质上都是一样的使用,只是使用了eq、ne、lt 、le、gt 、ge 等代表了【== \!= \<\<= \>\>=  】;这里有一个要注意⚠️的一个就是布尔值 判断时候零值返回false假,其余的值都是true真。

<P>if else 判断语句 end 值:{{.score}} </P>
    {{if gt .score 90}}
    <h2>优秀</h2>
    {{else if gt .score 60}}
    <h3>及格</h3>
    {{else }}
    <p>差</p>
    {{end}}

5. 循环遍历

 这里循环可以理解为javascript的for循环标签一样,只是go语言中 使用 {{range $key, $value := .list}}遍历条件{{end}}

同时这个也可以和判断条件一起使用;具体表现形式可以参考一下代码:

  <p>加上条件判断</p>
    <ul>
        {{range $key, $value := .testList}}
        <li>{{ $key }} ---{{ $value}}</li>
        {{else}}
            <li> 数组没有数据</li>
        {{end}}
    </ul>
    <br>
    <hr>

6. with 解构 数据

with 结构 结构体数据可以理解 es6的语法糖 ...arr 这个类型的解构;当然,也不是说让你生搬硬套,就是理解这个 with 如何解构变量的(结构体-切片);

具体的就看代码吧;

   <h2>with 解构 结构体</h2>
    <P>{{.news.Title}}</P>
    <P>{{.news.Content}}</P>
    <p>当然可以有另外一种取值简单方法:</p>

    {{with .news}} 
解构 结构体使用with后变得很简单只要使用 . 这个符号代表它的长变量名称达到减少代码的编写和可阅读性;
    <P>{{.Title}}</P>
    <P>{{.Content}}</P>
{{end}}
    <br>
    <hr>

{{with .news}}…… {{end}} 中解构 结构体使用with后变得很简单只要使用 . 这个符号代表它的长变量名称达到减少代码的编写和可阅读性

在Gin框架中,有一些预定义函数可以在模板文件中直接使用,这些函数可以帮助我们更方便地处理模板数据。

  1. len函数

len函数用于返回一个字符串、数组、切片、字典或通道中元素的个数。在模板文件中,可以使用"{{ len .Data }}"语句来调用len函数。

<!DOCTYPE html>
<html>
<head>
    <title>Len Example</title>
</head>
<body>
    <p>There are {{ len .Data }} items in the array.</p>
</body>
</html>

在模板文件中,我们使用"{{ len .Data }}"语句来调用len函数,统计数组中元素的个数,并将结果输出到模板文件中。

        2. range函数

range函数用于遍历一个字符串、数组、切片、字典或通道中的所有元素,并将每个元素的值和索引传递给模板文件。在模板文件中,可以使用"{{ range .Data }}"和"{{ end }}"语句来调用range函数,并使用"{{ . }}"语句来访问元素的值和索引。

在模板文件中,我们使用"{{ range $index,$value := .Data }}"和"{{ end }}"语句来调用range函数,并使用"{{ index }}"和"{{ value }}"语句来访问元素的值和索引。

     3. url函数

url函数用于生成一个URL,可以将路由和参数传递给它,它会返回一个完整的URL字符串。在模板文件中,可以使用"{{ url "route" }}"和"{{ url "route" arg1 arg2 … }}"语句来调用url函数。

例如,在以下示例中,我们使用url函数生成了一个URL,并将其输出到模板文件中:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    // 路由
    router.GET("/", func(c *gin.Context) {
        c.HTML(200, "index.html", gin.H{})
    })

    // 启动HTTP服务
    router.Run(":8080")
}
<!DOCTYPE html>
<html>
<head>
    <title>URL Example</title>
</head>
<body>
    <a href="{{ url "search" }}">Search</a>
    <a href="{{ url "user" "123" }}">User 123</a>
</body>
</html>

在模板文件中,我们使用"{{ url "route" }}"和"{{ url "route" arg1 arg2 … }}"语句来调用url函数,生成一个URL,并将其输出到模板文件中。

以上就是Gin框架中的一些预定义函数。在实际开发中,我们可以根据需要自定义函数,并通过render.SetFuncMap方法来注册

以上就是使用Gin框架进行模板渲染的基本步骤。通过学习这些基础知识,可以进一步学习如何使用模板继承、模板函数等高级功能来满足更多实际需求。

标给博主点个赞!!!

希望这能够帮到你,可以给博主点个赞!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

匠造一知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值