前提
GoAdmin 还不会用自带模板去创建页面,
而我知道路由设置自定义页面的做法,所以做页面的时候,用html去写了。
步骤
1. 创建一个模块
模仿Django的app管理方式,把一个功能模块独立起来。但不像Django那样由框架创建,GoAdmin是自己组织目录结构,把所有相关的东西放在一个子目录中,里面自己组织。比如:
project/
main.go # 整个项目入口
go.mod # 管理依赖包
config.yml # 项目配置文件
global/ # 全局的东西
util/ # 工具包
myapp/ # 这个就是一个独立的模块,其他模块基本都有类似的目录结构,但不是必须一样
api/ # 接口放在这里
html/ # html文件
pages/ # go来读取html文件,可以是模板文件
route/ # 模块内的各种路由设置
static/ # `html/`里的*.html用到的资源文件,js/css等等
2. 设置路由
main.go
中原本写路由的地方,以一个InitRouter
方法代替。多一个模块,就多一个对应的方法,看起来main.go
就不会太乱。
// main.go
r := gin.Default()
...
route.InitRouter(r) // 自己定义的方法
然后在模块里myapp/route/route.go
里:
package route
func InitRouter(r *gin.Engine) {
// 自定义页面
r.GET("/myapp/reply", ginAdapter.Content(pages.reply))
// 自定义api
r.POST("/myapp/api/reply", api.reply)
// 静态路由
r.Static("/statics", "./myapp/static")
}
就是在这里面设置各种路由。
3. 访问资源
上面r.Static
的代码,意思是当地址栏有http://host:port/statics/xxx
这种路径时,要对应到实际目录的myapp/static/xxx
路径。 其中xxx
就是具体的资源路径。
设置好了这行代码,就可以访问静态资源了。
可以是在地址栏直接输入资源路径,在浏览器打开文件
也可以是在html文件中的<link>
<script>
等引用进来
到此可以愉快地运行了
4. 一个误导
Goland写代码,在html页面编辑时,会有个误导,它会根据本地项目里的路径关系来做提示。比如:
<link rel="stylesheet" href="/statics/bootstrap-3.4.1-dist/css/bootstrap.min.css">
它会提示href里的/statics/xxxx
是不存在的,的确,本地目录是叫static
(注意没有s
)。
但不应该理会这个提示。因为实际发布出去,这个html页面打开的话,访问是按前面r.Static
设置的路由对应关系来访问静态资源:
r.Static("/statics", "./myapp/static")
就会在./myapp/static/bootstrap...
这个本地路径找bootstrap-3.4.1-dist/css/bootstrap.min.css
文件
5. 一个错误
GoAdmin其实还带上了jquery的东西,因为我自己如果在html引用jquery的话,
<script src="/statics/plugins/jquery-3.6.4.min.js"></script>
控制台会报错,提示http://127.0.0.1/assets/dist/js/all_2.min.38a2a946b0.js
代码有错误(具体什么错误不重要),当我删掉这行代码,就不报错了,并且ajax请求正常。