Golang框架Gin入门实战--(4)HTML模板渲染以及模板语法 自定义模板函数 静态文件服务(下)

Golang框架Gin入门实战–(4)HTML模板渲染以及模板语法 自定义模板函数 静态文件服务(下)

此篇文章内容基于上篇文章继续修改Golang框架Gin入门实战–(3)HTML模板渲染及模板语法(上)
在这里插入图片描述
main.go

package main

import (
	"fmt"
	"html/template"
	"time"

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

type Article struct {
	Title   string
	Content string
}

//时间戳转换成日期
func UnixToTime(timestamp int) string {
	fmt.Println(timestamp)
	t := time.Unix(int64(timestamp), 0)

	return t.Format("2006-01-02 15:04:05")
}
func Println(str1 string, str2 string) string {
	fmt.Println(str1, str2)
	return str1 + "-----" + str2

}
func main() {
	r := gin.Default()
	//自定义模板函数  注意要把这个函数放在加载模板前
	r.SetFuncMap(template.FuncMap{
		"UnixToTime": UnixToTime,
		"Println":    Println,
	})
	//加载模板
	r.LoadHTMLGlob("templates/**/*")
	//  配置静态web目录 第一个参数表示路由 第二个参数表示映射的目录
	r.Static("/static", "./static")

	//前台
	r.GET("/", func(c *gin.Context) {
		c.HTML(200, "default/index.html", gin.H{
			"title": "aaa",
			"msg":   "我是msg",
			"score": 89,
			"hobby": []string{"吃饭", "睡觉", "写代码"},
			"newsList": []interface{}{
				&Article{
					Title:   "新闻标题111",
					Content: "新闻详情111",
				},
				&Article{
					Title:   "新闻标题222",
					Content: "新闻详情222",
				},
			},
			"testSlice": []string{},
			"news": &Article{
				Title:   "新闻标题",
				Content: "新闻内容",
			},
			"date": 1654565445,
		})

	})

	r.GET("/news", func(c *gin.Context) {
		news := &Article{
			Title:   "新闻标题",
			Content: "新闻详情",
		}
		c.HTML(200, "default/news.html", gin.H{
			"title": "新闻页面",
			"news":  news,
		})

	})
	//后台
	r.GET("/admin", func(c *gin.Context) {
		c.HTML(200, "admin/index.html", gin.H{
			"title": "后台首页",
		})

	})

	r.GET("/admin/news", func(c *gin.Context) {
		c.HTML(200, "admin/news.html", gin.H{
			"title": "新闻页面",
		})

	})
	r.Run()
}

GINDEMO\templates\admin\index.html

{{define "admin/index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>这是后台首页</h2>
</body>
</html>
{{end}}

GINDEMO\templates\admin\news.html

{{define "admin/news.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>后台新闻页面</h2>
</body>
</html>
{{end}}

GINDEMO\templates\default\index.html

<!--相当于给模板定义一个名称 define-end成对出现-->
{{define "default/index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="/static/css/base.css">
</head>
<body>

    {{template "public/page_header.html" .}}

    <img src="/static/images/test.jpg" alt="">
    <h2>{{.title}}</h2>

    {{$t := .title}}

<!-- 定义变量 -->
    <br>
    <h4>
        {{$t}}
    </h4>
    <!-- 条件判断 -->
    {{if ge .score 60}}
        <p>及格</p>
    {{else}}
        <p>不及格</p>
    {{end}}

    {{if gt .score 90}}
    <p>优秀</p>
    {{else if gt .score 80}}
    <p>良好</p>
    {{else if gt .score 60}}
    <p>及格</p>
    {{else}}
    <p>不及格</p>
    {{end}}

    <!-- 循环遍历数据 -->
<ul>
    {{range $key,$value:=.hobby}}
    <li>{{$key}}----{{$value}}</li>
    {{end}}
</ul>

<br>

<ul>
    {{range $key,$value:=.newsList}}
         <li>{{$key}}----{{$value.Title}}----{{$value.Content}}</li>
    {{end}}
</ul>

<br>
<ul>
    {{range $key,$value:=.testSlice}}
    <li>{{$key}}----{{$value}}</li>

    {{else}}
        <li>数组中没有数据</li>
    {{end}}
</ul>

<!-- with 解构结构体 -->
<p>{{.news.Title}}</p>
<p>{{.news.Content}}</p>

<br>

{{with .news}}
<p>{{.Title}}</p>
<p>{{.Content}}</p>
{{end}}
<br>
<!-- 预定义函数(了解) -->
{{len .title}}

<!-- 自定义模板函数 -->
<br>
<br>

{{.date}}


<br>
<br>

{{UnixToTime .date}}

<br>
<br>
{{Println .title .msg}}

<br><br>
{{template "public/page_footer.html" .}}

</body>
</html>
{{end}}

GINDEMO\templates\default\news.html

{{define "default/news.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="static/css/base.css">
</head>
<body>
    {{template "public/page_header.html" .}}

    <h2>{{.title}}</h2>
    <p>
        {{.news.Title}}
    </p>
    <p>
        {{.news.Content}}
    </p>

    <br><br>
    {{template "public/page_footer.html" .}}

</body>
</html>
{{end}}

GINDEMO\templates\public\page_footer.html

<!--相当于给模板定义一个名称 define-end成对出现-->
{{define "public/page_footer.html"}}


<h1>
    我是一个公共的底部
</h1>
{{end}}

GINDEMO\templates\public\page_header.html

<!--相当于给模板定义一个名称 define-end成对出现-->
{{define "public/page_header.html"}}


<h1>
    我是一个公共的标题---{{.title}}
</h1>
{{end}}

在demo目录下创建一个static目录用于存放静态文件
再在static目录下分别创建css、images、js目录

GINDEMO\static\css

h1 {
    
   background: #000;
    color: #fff;
    text-align: center;
    

}

h2 {
    color: red;
}

GINDEMO\static\images
存放一张名为test.jpg图片

访问localhost:8080
在这里插入图片描述
访问localhost:8080/news
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

互联网-小阿宇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值