gin模板
缺点
- 模板引擎不具备运算功能
- 模板不能继承方法,只能使用导入
- 没有比较符,只有比较函数,参考下面的比较函数
多个页面的方法:
顶部header.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试标题</title>
<link href="./static/index.css" rel="stylesheet">
</head>
<body>
底部bottom.html:
</body>
</html>
页脚内容footer.html:
<br>这是页尾文字
index.html:
{{template "header.html"}}
这里是index
<!--如果要把变量传递给子模板 就要使用{{template "header.html" . }}-->
<!--如果不需要页脚内容就不要插入footer.html-->
{{template "footer.html"}}
{{template "bottom.html"}}
注意,模板传递的变量格式:{{ .var }}
模板数组变量不遍历直接访问 {{index .var 0}}
只能有一个页面的方法,不推荐这个用法:
主模板位置添加:
<!--这是是主模板顶部内容-->
{{block "main" .}}{{end}}
<!--{{block "main" .}}{{end}}是子模板占用-->
<!--这主模板底部内容-->
子模板:
{{template "layout.html"}}
{{define "main"}}
这里是替换内容
{{end}}
格式化时间
{{.CreatedAt.Format "2006-01-02 15:04:05"}}
//假设CreatedAt是一个时间变量
遍历变量
注意,在range 遍历内部任何变量都会认为是.results的子变量,此时若要引用外部变量示范{{$.var}}
{{range .results}}
<a href="#">{{.Subject}}</a>
<p>{{.Jieduan}}</p>
<div>{{.CreatedAt.Format "2006-01-02 15:04:05"}}</div>
{{end}}
比较函数
eq:等于
ne:不等于
lt:小于
le:小于等于
gt:大于
ge:大于等于
用法:{{if gt .page 1}}
只有page大于1时中间的内容才会显示
自定义模板函数
//自定义模板函数,utc转utc+8
func Utczhuan(utcTime time.Time) string {
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
log.Print("Utczhuan时区转换函数出错:",err)
return ""
}
return utcTime.In(loc).Format("2006-01-02 15:04:05")
}
//下面的写在gin初始化函数中
r := gin.Default()
// 注册模板函数,要在加载模板之前使用,注意顺序,否则会报错
r.SetFuncMap(template.FuncMap{
"Utczhuan": Utczhuan,
})
r.LoadHTMLGlob("templates/*")//加载html模板全局,指定templates目录下的所有文件
分页查询示范
// 文章列表
func Lists(c *gin.Context) {
page1, err := strconv.Atoi(c.Param("page")) //页码需要先转整数
if err != nil {
// 处理转换错误
c.JSON(400, gin.H{"page_error": err})
return
}
page := int64(page1) //转为int64
pageSize := int64(6) // 每页显示的文档数量
// 计算要跳过的文档数量
skip := (page - 1) * pageSize
// 设置查询选项,包括分页参数
findOptions := options.Find()
findOptions.SetSkip(int64(skip))
findOptions.SetLimit(int64(pageSize))
var zongyeshu int64 //定义一个总页数变量
var results []model.Article_model
// 执行查询操作
cursor, err := model.FaqModel.Find(context.TODO(),{},findOptions)
if err != nil {
//处理错误
return
}
if err := cursor.All(context.TODO(), &results); err != nil {
// 处理解码错误
return
}
//取当前总页数
zongtiaoshu, _ := model.FaqModel.CountDocuments(context.TODO(), {})
zongyeshu = int64(math.Ceil(float64(zongtiaoshu) / float64(pageSize)))
shangye := page - 1
xiaye := page + 1
//渲染模板
c.HTML(200, "lists.html", gin.H{"results":results,"page":page,"shangye":shangye,"xiaye":xiaye,"zongyeshu":zongyeshu})
}
前端:
{{if gt .page 1}}
<a href="/lists/{{.shangye}}">上一页</a>
{{end}}
{{if lt .page .zongyeshu}}
<a href="/lists/{{.xiaye}}">下一页</a>
{{end}}