gin模板渲染以及模板语法

c.HTML

在 Gin 框架中,c.HTML 是 gin.Context 上的方法,用于渲染 HTML 模板并将渲染后的 HTML 内容发送给客户端。

func (c *Context) HTML(code int, name string, obj interface{})

参数说明:

  • code:HTTP 状态码,例如 200 表示成功。
  • name:要渲染的 HTML 模板文件的名称,这个名称是在使用 - LoadHTMLGlob 或 LoadHTMLFiles 方法加载模板文件时指定的名称。
  • obj:要传递给模板渲染的数据,一般使用 gin.H 对象或其他 Go 结构体作为数据。
    以下是一个简单的例子,演示了如何使用 c.HTML 方法在 Gin 中渲染 HTML 模板:
package main

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

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

    // 加载 HTML 模板文件
    r.LoadHTMLGlob("templates/*")

    r.GET("/", func(c *gin.Context) {
        // 渲染 index.html 模板文件并发送给客户端
        c.HTML(200, "index.html", gin.H{
            "title": "Gin Web Framework",
        })
    })

    r.Run(":8080")
}

在这个例子中,当访问根路径 "/" 时,通过 c.HTML 方法渲染了名为 index.html 的模板文件,并将一个包含标题信息的 gin.H 对象作为模板渲染的数据。最后通过 c.HTML 方法将渲染后的 HTML 内容发送给客户端。

前端模板的if else语法

在 Gin 框架的前端模板中,使用的是 Go 模板引擎,其语法类似于标准的 Go 模板语法,包括了条件判断语法。

以下是 Gin 框架前端模板中的 if 和 else 语法介绍:

{{ if .condition1 }}
  <!-- 条件1满足时的内容 -->
{{ elseif .condition2 }}
  <!-- 条件2满足时的内容 -->
{{ else }}
  <!-- 所有条件都不满足时的内容 -->
{{ end }}

以下是一个在 Gin 框架前端模板中使用 if 和 else 进行条件判断的具体例子:

假设在前端模板中传入了一个名为 .IsLoggedIn 的布尔值变量,表示用户是否已登录,我们可以根据这个变量的值来展示不同的页面内容。

<!DOCTYPE html>
<html>
<head>
  <title>条件判断示例</title>
</head>
<body>
  <h1>欢迎访问我的网站</h1>

  {{ if .IsLoggedIn }}
    <!-- 如果用户已登录,显示欢迎信息 -->
    <p>欢迎您,{{ .Username }}!</p>
    <a href="/logout">退出登录</a>
  {{ else }}
    <!-- 如果用户未登录,显示登录按钮 -->
    <a href="/login">登录</a>
  {{ end }}
</body>
</html>

在上面的例子中,.IsLoggedIn 是一个布尔值变量,表示用户是否已登录,.Username 是一个字符串变量,表示登录用户的用户名。当 .IsLoggedIn 为 true 时,会显示欢迎信息和退出登录链接;当 .IsLoggedIn 为 false 时,会显示登录链接。

gin前端模板的range

在 Gin 框架的前端模板中,range 是用于迭代循环的语法,可以用于遍历切片、数组、映射等数据结构,并在模板中根据迭代的结果进行渲染。

range 语法的基本格式如下:

{{ range .Data }}
  <!-- 循环体 -->
{{ end }}

其中,.Data 是一个需要迭代的数据结构,可以是一个切片、数组、映射等。

在循环体内,可以使用 . 表示当前迭代的元素,也可以通过 .KeyName 的方式访问映射中的键值对。例如:

<!DOCTYPE html>
<html>
<head>
  <title>Range语法示例</title>
</head>
<body>
  <h1>用户列表</h1>

  <ul>
    {{ range .Users }}
      <li>{{ .Name }} - {{ .Age }} 岁</li>
    {{ end }}
  </ul>
</body>
</html>

在上面的例子中,.Users 是一个切片或数组,表示用户列表。通过 range 语法在模板中遍历 .Users 中的每个用户,然后使用 .Name 和 .Age 分别获取用户对象的姓名和年龄,并在模板中渲染成一个用户列表。

通过使用 range 语法,可以在 Gin 框架的前端模板中实现循环遍历数据,并根据迭代结果进行动态渲染,从而实现灵活的前端展示。

gin前端模板的with

在 Gin 框架的前端模板中,with 是用于在模板中设置当前上下文对象的语法,可以在模板中指定一个对象作为当前上下文,从而可以直接访问该对象的字段和方法。

with 语法的基本格式如下:

{{ with .Data }}
  <!-- 当前上下文中的字段和方法的访问 -->
{{ end }}

其中,.Data 是一个对象,可以是一个结构体、映射、指针等。在 with 语法的内部,可以直接访问当前上下文对象的字段和方法,无需再使用 . 符号进行前缀。

例如,假设有以下的数据结构定义:

type User struct {
    Name string
    Age  int
}
可以将 User 对象作为当前上下文,然后在模板中直接访问其字段和方法,例如:
<!DOCTYPE html>
<html>
<head>
  <title>With语法示例</title>
</head>
<body>
  <h1>用户信息</h1>

  {{ with .User }}
    <p>姓名:{{ .Name }}</p>
    <p>年龄:{{ .Age }} 岁</p>
  {{ end }}
</body>
</html>

在上面的例子中,.User 是一个 User 对象,通过 with 语法设置其为当前上下文,然后在模板中直接访问 .Name 和 .Age 字段,从而渲染用户信息。

通过使用 with 语法,可以在 Gin 框架的前端模板中设置当前上下文对象,从而方便地访问对象的字段和方法,简化模板中的语法

模板复用

{{template "default/page_header.html . }} 是Go语言的模板语法中的一个指令,用于在当前模板中引用另外一个模板文件。

具体解释如下:

  • template:表示模板引擎的指令关键字。
  • "default/page_header.html":表示被引用的模板文件名
  • .:表示当前模板中的数据上下文,即当前的数据对象。
    这段代码的作用是在当前模板中引用名为 "default/page_header.html" 的模板文件,并将当前数据对象(通常是当前模板的数据上下文)作为参数传递给被引用的模板文件进行渲染。
    这种方式的使用场景通常是在模板中需要复用一段HTML代码或者一块逻辑,可以将这部分代码抽取为一个独立的模板文件,然后通过 {{template}} 指令在其他模板中引用,从而实现模板的复用和代码的组织。
    假设我们有一个 page_header.html 模板文件,内容如下:
<!DOCTYPE html>
<html>
<head>
    <title>{{.Title}}</title>
    <!-- 其他头部代码 -->
</head>
<body>
    <!-- 导航栏等页面头部内容 -->
</body>
</html>
其中,{{.Title}} 表示模板中的数据上下文中的 Title 字段。

然后,我们有多个页面需要包含这个页面头部,例如 home.html 和 about.html。

在 home.html 模板中,我们可以通过以下方式引用 page_header.html 模板:
{{template "default/page_header.html" .}}
<!-- 其他页面内容 -->
在 about.html 模板中,同样可以通过以下方式引用 page_header.html 模板:
{{template "default/page_header.html" .}}
<!-- 其他页面内容 -->

这样,home.html 和 about.html 页面都会包含 page_header.html 模板中的页面头部内容,从而实现了页面头部的复用。在渲染时,模板引擎会将当前模板的数据上下文传递给 page_header.html 模板,使得其中的 {{.Title}} 可以动态地渲染为当前页面的标题。

r.static

r.Static() 是 gin 路由引擎 (gin.RouterGroup) 中的一个方法,用于处理静态文件的路由。

r.Static() 方法可以用来将一个或多个目录下的静态文件提供给客户端,例如图片、CSS 文件、JavaScript 文件等。这样,当客户端请求这些静态文件时,gin 会自动查找指定目录下的文件并返回给客户端。

r.Static() 方法的语法如下:

func (r *RouterGroup) Static(relativePath, root string) gin.IRoutes

其中,relativePath 参数表示路由的相对路径,即客户端请求的 URL 路径,root 参数表示静态文件的根目录,即静态文件的物理路径。

以下是一个使用 r.Static() 方法的例子:

package main

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

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

    // 将 "/static" 路径映射到 "static" 目录下的静态文件
    r.Static("/static", "./static")

    r.Run(":8080")
}

在这个例子中,r.Static("/static", "./static") 将客户端请求的 URL 路径以 "/static" 开头的请求映射到当前目录下的 "static" 目录中的静态文件。例如,如果存在一个名为 "static/css/styles.css" 的文件,那么客户端请求 "/static/css/styles.css" 时,gin 会自动查找并返回该文件给客户端。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容