💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第二十九篇 Gin模板渲染补充+表单设置

第29讲 Gin模板渲染补充+表单设置

本讲基于视频实际讲解内容整理


一、本讲概述

本讲是对模板渲染的补充,并专门讲解表单在模板中的写法。前面我们渲染过列表和页面,本讲补充模板里更实用的语法(自动转义、with、比较、模板函数),以及如何在模板中写出能正确提交数据的表单。


二、模板渲染补充

2.1 自动转义(安全特性)

Go 的 html/template 会自动转义变量,防止 XSS:

HTML
<!-- 如果 .content 含有 <script> 会被转义成纯文本 -->
<p>{{.content}}</p>

老师提醒:这是好事,能防注入。但如果确实要输出 HTML(比如富文本),需要特殊处理,初学阶段先理解"默认转义是安全的"即可。

2.2 with:简化深层字段访问

访问嵌套字段时,用 with 可以省略前缀:

HTML
{{with .user}}
    <p>姓名:{{.Name}}</p>
    <p>年龄:{{.Age}}</p>
{{end}}

等价于 {{.user.Name}}、{{.user.Age}},但更简洁。

2.3 比较运算

模板里可以用 eq / ne / lt / gt / le / ge:

HTML
{{if eq .role "admin"}}
    <a href="/admin">进入后台</a>
{{else}}
    <p>普通用户</p>
{{end}}
函数 含义
eq 等于 ==
ne 不等于 !=
lt 小于 <
gt 大于 >
le 小于等于
ge 大于等于

2.4 自定义模板函数(FuncMap,了解)

Go
r.SetFuncMap(template.FuncMap{
    "safe" func(s string) template.HTML { return template.HTML(s) },
})
r.LoadHTMLGlob("templates/*")

老师说明:进阶用法,初学了解即可。常用来自定义日期格式化、字符串处理等。


三、表单设置

3.1 表单基本结构

HTML
<form method="post" action="/login">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <button type="submit">登录</button>
</form>
属性 说明
method get 或 post(提交数据用 post)
action 表单提交到的后端路由
input name 后端靠 name 取值,name 必须写对

老师强调:name 属性最关键!后端是用 name 来取表单值的,不是 id。很多同学漏写 name 导致取不到值。

3.2 预填表单值(编辑场景)

从后端传数据到模板,用 value="{{.字段}}" 预填:

HTML
<form method="post" action="/post/update">
    标题:<input type="text" name="title" value="{{.post.Title}}"><br>
    内容:<textarea name="content">{{.post.Content}}</textarea><br>
    <button type="submit">保存</button>
</form>

3.3 下拉框、单选、复选

HTML
<!-- 下拉框 -->
<select name="category">
    <option value="1">技术</option>
    <option value="2">生活</option>
</select>

<!-- 单选 -->
<input type="radio" name="gender" value="male"> 男
<input type="radio" name="gender" value="female"> 女

<!-- 复选 -->
<input type="checkbox" name="hobby" value="code"> 编程
<input type="checkbox" name="hobby" value="music"> 音乐

老师提醒:单选/复选靠相同 name 分组;后端取复选框会得到多个同 name 的值,要用 c.QueryArray 或 c.PostFormArray。

3.4 隐藏字段

HTML
<input type="hidden" name="id" value="{{.post.ID}}">

隐藏字段常用于传 ID 等不需要用户看到、但后端需要的数据。


四、本讲小结

知识点 要点
自动转义 html/template 默认防 XSS
with 简化嵌套字段访问
比较 eq/ne/lt/gt 等函数
表单 name 后端靠 name 取值,必须写
预填 value="{{.字段}}"
单选/复选 相同 name 分组;复选用 PostFormArray

五、课后练习

  1. 写一个登录表单,包含 username、password(password 类型),提交到 /login
  2. 在模板中故意插入一段含 <script> 的内容,观察是否被转义
  3. 用 {{with .user}} 改写一段嵌套字段的展示
  4. 用 {{if eq .role "admin"}} 区分管理员/普通用户显示
  5. 写一个"编辑帖子"表单,用 value="{{.post.Title}}" 预填标题
  6. 写一个含单选(性别)和复选(爱好)的表单,思考后端如何取值