静态文件与模板:资源目录、gview 模板渲染与变量
引言
除接口外,网站通常还有静态资源(图片、CSS/JS)与动态页面。GoFrame 的静态目录由服务端配置,页面渲染由 gview 模板引擎负责。本章讲资源目录约定与模板基本渲染。
概念
- 资源目录:工程静态资源统一放在
resource/下(如resource/public放静态文件、resource/template放模板),可用 gres 组件打包进二进制(以官方文档资源管理章节为准)。 - 静态文件:服务端通过
s.SetServerRoot("resource/public")等方式指定静态目录,浏览器直接访问其中的文件。 - 模板引擎 gview:
g.View()获取默认视图,模板语法与标准库 html/template 风格相近:{{.变量}}输出、{{if}}/{{range}}做控制。 - 渲染入口:解析字符串用
ParseContent(ctx, 内容, 数据);解析模板文件用Parse(ctx, 文件, 数据);路径解析规则见官方文档 gview 章节。 - 模板变量:渲染数据通常是
g.Map,键在模板中以.键名访问。
代码示例
先做静态文件。假设目录结构:
resource/
├── public/
│ └── logo.png
└── template/
└── index.html
服务端代码:
package main
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
func main() {
s := g.Server()
// 指定静态资源目录
s.SetServerRoot("resource/public")
// 渲染模板页面
s.BindHandler("/", func(r *ghttp.Request) {
content, err := g.View().Parse(r.Context(), "index.html", g.Map{
"title": "GoFrame 首页",
"welcome": "欢迎学习 GoFrame v2",
})
if err != nil {
r.Response.WriteStatus(500, "render error")
return
}
r.Response.Write(content)
})
s.SetPort(8000)
s.Run()
}
模板文件 resource/template/index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{.title}}</title>
</head>
<body>
<h1>{{.welcome}}</h1>
{{if .user}}
<p>当前用户:{{.user.name}}</p>
{{else}}
<p>未登录</p>
{{end}}
</body>
</html>
其中 {{.user.name}} 演示嵌套数据(user 是 map/结构体)。不依赖文件时,也可以直接渲染模板字符串:
content, err := g.View().ParseContent(r.Context(),
"hello {{.name}}, 今年 {{.age}} 岁",
g.Map{"name": "GoFrame", "age": 4},
)
注意点
SetServerRoot指定的路径相对运行目录;gf run下以工程根目录为基准,部署后注意工作目录。Parse的"文件路径"基于 gview 的模板目录查找规则,目录结构与默认路径不一致时先按官方文档配置。- 模板变量默认支持
{{.键}}自动转义行为依配置而定;输出用户内容做富文本时注意转义配置(autoescape)。 - 静态文件与动态路由重名时,路由注册顺序与静态服务规则的匹配优先级以官方文档为准。
小结
resource/ 管资源、SetServerRoot 放静态、g.View().Parse 出页面,即可支撑传统 Web 页面场景;前后端分离时静态资源由网关/CDN 托管,后端只出 JSON。gview 布局、继承等高级用法以官方文档 goframe.org 为准。