首页 > 其他分享 >Golang Gin 模板基本使用

Golang Gin 模板基本使用

时间:2023-11-22 18:56:00浏览次数:45  
标签:返回 函数 Golang html 参数 router Gin 模板

一, 模板定义,模板变量,条件判断,模板函数,模板命名

  1 {{define "default/index.html"}}
  2 <!DOCTYPE html>
  3 <html lang="en">
  4 
  5 <head>
  6     <meta charset="UTF-8">
  7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8     <title>Document</title>
  9     <link rel="stylesheet" href="/static/css/base.css">
 10 </head>
 11 
 12 <body>
 13     <h2>{{.title}}</h2>
 14     <br>
 15     <!-- 定义变量 -->
 16     {{$t := .title}}
 17     <h4>{{$t}}</h4>
 18     <br>
 19     <pre>
 20         eq 如果 arg1 == arg2 则返回真
 21         ne 如果 arg1 != arg2 则返回真
 22         lt 如果 arg1 < arg2 则返回真 
 23         le 如果 arg1 <=arg2 则返回真 
 24         gt 如果 arg1> arg2 则返回真
 25         ge 如果 arg1 >= arg2 则返回真
 26     </pre>
 27     <br>
 28     <h3>条件判断</h3>
 29     <pre>
 30         {{if ge .score 85}}
 31             <p>优秀</p>
 32         {{else if ge .score 60}}
 33             <p>及格</p>
 34         {{else}}
 35             <p>不及格</p>
 36         {{end}}
 37     </pre>
 38     <br>
 39     <h3>range 遍历数据</h3>
 40     <ul>
 41         {{range $key,$value:=.hobby}}
 42         <li>{{$key}}:{{$value}}</li>
 43         {{end}}
 44     </ul>
 45 
 46     <ul>
 47         {{range $key, $value := .testSlice}}
 48         <li>{{$key}}:{{$value}}</li>
 49         {{else}}
 50         <li>数组中没有数据</li>
 51         {{end}}
 52 
 53     </ul>
 54 
 55     <ul>
 56         {{range $key, $value := .news}}
 57         <li>{{$key}}:{{$value.Title}}:{{$value.Content}}</li>
 58         {{end}}
 59     </ul>
 60     <br>
 61     <h3>with 解构结构体</h3>
 62     <p>原来的写法:{{.testWith.Title}}</p>
 63     <p>with写法:
 64 
 65         {{with .testWith}}
 66         {{.Title}}
 67         {{.Content}}
 68         {{end}}
 69     </p>
 70     <br>
 71     <h3>预定义模板函数</h3>
 72     <pre>
 73         执行模板时,函数从两个函数字典中查找,首先时模板函数字典,然后时全局函数字典.
 74         一般不再模板内定义函数,而是使用Funcs方法添加函数到模板里.
 75         and  :  函数返回它的第一个empty参数或者最后一个参数.
 76                 就是说"and x y"  等价于 "if x then y else x" 所有参数都会执行
 77         or   :  返回第一个非empty参数或者最后一个参数.
 78                 亦及"or x y"等价于"if x then x else y" 所有参数都会执行
 79         not  :  返回它的单个参数的bool值的否定
 80         len  :  返回它的参数的整数类型长度
 81         index:  执行结果为第一个参数以剩下的参数为所有/键指向的值
 82                 如"index x 1 2 3"返回 x[1][2][3]的值;每个被索引的主题必须时数组\切片或者字典.
 83         print:  即 fmt.Sprint
 84         printf:  即 fmt.Sprintf
 85         println:  即 fmt.Sprintln
 86         html:   返回与其参数的文本表示形式等效的转义HTML
 87                 这个函数在html/template中不可用
 88         urlquery:以适合嵌入到网址查询中的形式返回其参数的文本表示的转义值.
 89                 这个函数在html/template中不可用
 90         js:     返回与其参数的文本表示形式等效的转义JavaScript
 91         call:   执行结果是调用第一个参数的返回值,该参数必须是函数类型,其余参数作为调用该函数的参数.
 92                 如"call .X.Y 1 2" 等价于"dot.X.Y(1,2)"
 93                 其中Y是函数类型的字段或者字典的值,或者其他类似情况
 94                 call 的第一个参数的执行结果必须是函数类型的值,(和定义的print明显不同)
 95                 该函数类型必须有1到2个返回值,如果有两个则后一个必须是error接口类型
 96                 如果有2个返回值的方法返回的error非nil,模板执行会中断并返回给调用模板执行者该错误
 97         
 98     </pre>
 99     <br>
100     <h3>自定义模板函数</h3>
101     <pre>
102         {{.date}}
103         {{UnixToTime .date}}
104         {{Println .title .msg}}
105     </pre>
106     <br>
107     <h3>模板引用</h3>
108     <pre>
109         注意: 1. public/page_header.html 模板已经定义好了
110               2. 引入的时候注意最后的(.)  将当前页面的数据变量传进去
111         {{template "public/page_header.html" .}}
112     </pre>
113 
114     <br>
115 
116 </body>
117 
118 </html>
119 {{end}}

 

二, 模板加载,自定义模板函数,配置静态web目录

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "net/http"
 6     "text/template"
 7     "time"
 8 
 9     "github.com/gin-gonic/gin"
10 )
11 
12 func main() {
13     TestTemelates()
14 }
15 
16 func UnixToTime(timestamp int) (result string, err error) {
17     fmt.Println(timestamp)
18     t := time.Unix(int64(timestamp), 0)
19     return t.Format("2006-01-02 15:04:05"), nil
20 
21 }
22 
23 func Println(str1, str2 string) string {
24     fmt.Println(str1, str2)
25     return str1 + str2
26 }
27 
28 // 命名模板
29 func TestTemelates() {
30     router := gin.Default()
31 
32     // 自定义模板函数. 必须在加载模板之前SetFuncMap
33     router.SetFuncMap(
34         template.FuncMap{
35             "UnixToTime": UnixToTime,
36             "Println":    Println,
37         })
38 
39     // templates/**/*  代表加载templates下的所有二级目录下的所有模板
40     // templates/**/**/*  代表加载templates下的所有三级目录下的所有模板
41     // 模板分组就是将二级或三级目录的名字写进去
42     router.LoadHTMLGlob("templates/**/*")
43 
44     // 配置静态web目录   第一个参数表示路由   第二个参数表示映射的目录
45     // 这样你就可以通过: localhost:8080/static/css/base.css
46     // 页面引入: <link rel="stylesheet" href="/static/css/base.css">
47     router.Static("/static", "./static")
48 
49     router.GET("/news", func(c *gin.Context) {
50         c.HTML(http.StatusOK, "default/news.html", gin.H{
51             "title": "新闻页面",
52         })
53     })
54 
55     router.GET("/index", func(c *gin.Context) {
56         c.HTML(http.StatusOK, "default/index.html", gin.H{
57             "title": "首页",
58             "score": 85,
59             "hobby": []string{"吃饭", "睡觉", "写代码", "玩游戏"},
60             "news": []interface{}{
61                 &Article{
62                     Title:   "标题1",
63                     Content: "详情1",
64                 },
65                 &Article{
66                     Title:   "标题2",
67                     Content: "详情2",
68                 },
69             },
70             "testSlice": []string{},
71             "testWith": &Article{
72                 Title:   "标题3",
73                 Content: "详情3",
74             },
75             "date": 1700636995,
76             "msg":  "===",
77         })
78     })
79     router.Run("0.0.0.0:8080")
80 }

 

标签:返回,函数,Golang,html,参数,router,Gin,模板
From: https://www.cnblogs.com/watermeloncode/p/17850054.html

相关文章

  • nginx高可用
    高可用方案简单说就是集群,什么是集群呢,加单说就是一个不够来俩个,俩不够来三。所以高可用就是在之前传统方式的基础上,万一nginx挂了,所有服务都将不可用。所以可以使用以下结构,进行设计让两台需要集群的nginx进行绑定一个虚拟ip。准备:需要两台虚拟机、两台都安装nginx、安装ke......
  • Aspose.Words使用word模板中的书签/域插入信息并导出
    首先我大概叙述一下我对这个东西的理解毕竟我也只是记录一下,确保下次自己在看的时候可以看懂,所以写的比较详细且傻瓜首先这个word文档不是凭空生成的,是你事先就把文档创建好的,里边的内容,格式都是实现创建好的只留下一些需要插入数据的地方,当然这些需要插入数据的地方也不是空着的......
  • 【模板】最小度限制生成树 题解
    其他的题解感觉都好高级,分享一种好想且好实现的方法。我们可以先把点\(s\)和与其相连的边都删除,我们发现剩下的部分变成了一些连通块。我们不难发现,当要求与\(s\)点相连的边的个数为\(k\)时,我们的连通块个数显然是\(k\)的。接下来这个问题就转化成了:\(n-1\)个点中生......
  • AtCoder Beginner Contest 329
    劳累一天不该写题,启发式合并都写错了A-Spread(abc329A)题目大意给定一个字符串,将每个字符输出出来,中间留个空格。解题思路遍历输出即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_std......
  • Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践
    模板是Walrus的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署。用户可以使用HCL语言自定义创建模板,也可以一键复用Terraform社区中上万个成熟的Module。在本文中,我们将以阿里云EC2为例,介绍如何......
  • webpack的html模板中插入变量写法
    vue-cli文档中的描述如下Index文件#public/index.html 文件是一个会被 html-webpack-plugin 处理的模板。在构建过程中,资源链接会被自动注入。另外,VueCLI也会自动注入resourcehint(preload/prefetch、manifest和图标链接(当用到PWA插件时)以及构建过程中处理的Ja......
  • Golang Gin 初识
    1.Gin框架搭建,初识1//main.go2packagemain34/***5Gin入门:6文档:https://gin-gonic.com/zh-cn/docs/quickstart/7热加载:8文档:https://github.com/cosmtrek/air/blob/master/README-zh_cn.md9安装:g......
  • 【模板】链式前向星
    /*https://blog.csdn.net/sugarbliss/article/details/86495945?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169977002316800215045285%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169977002316800215045285&biz_id......
  • 【模板】并查集 (洛谷P3367)
    1#include<bits/stdc++.h>2usingnamespacestd;3template<classT>4inlinevoidread(T&s)5{6s=0;7intw=1;8charch=getchar();9while(ch<'0'||ch>'9')10{11......
  • 【模板】线段树1(洛谷P3372)
    1#include<iostream>2#include<cstdio>34usingnamespacestd;56template<classT>7inlinevoidread(T&s)8{9s=0;10intw=1;11charch=getchar();12while(ch<'0�......