
Go 自己的 html/template 有个问题
完整项目中使用多个区块+layout 会导致永远只有有一个生效,或许是我使用姿势有问题
举例说比如
<!-- layout.html --> {{block "in"}{{end}} <!-- a.html --> {{template "layout.html"}} {{define "in"}}a{{end}} <!-- b.html --> {{template "layout.html"}} {{define "in"}}b{{end}} package main //go:embed *.html var fs embee.FS func main() { t := &template.New("").ParseFS(fs, "*.html") // 无论是 a.html 或者是 b.html 永远都是相同的内容 // 因为所谓的 name 也算 define 内容一次被定义后会被后边的覆盖 t.ExecuteTemplate(os.Stdout, "a.html", nil) } 正确的方法应该是我这次需要显示 a.html ,就需要 template.new("").parsefs(fs,"layout.html","a.html")需要 b.html 的时候,再重新 parsefs(fs,"layout.html","b.html")
感觉就很……
要一个项目里几十上百个文件光是这个定义不得写死- -正确的使用姿势是什么呢?
看到 go-pongo2 自己实现了一套 Django 的语法 {% extends "xx" %} 但是好像几年没更新了
1 wateryessence 2024-06-20 10:04:00 +08:00 via iPhone htmx 挺火的 |
2 qloog 2024-06-20 10:17:33 +08:00 我是用的 一个三方封装的一个: https://github.com/foolin/gin-template/tree/master 使用方式: - 模板配置: https://github.com/go-eagle/eagle/blob/master/internal/routers/web.go - 模板示例: https://github.com/go-eagle/eagle/tree/master/internal/templates 用起来感觉还好,没遇到过什么问题。 |
3 |
4 dzdh OP @qloog 看着是预先定义一个 master 作为 layout 。然后动态 parse 并且 parse 之前先 parse master 。只能是这种方法了吗。 |
5 maladaxia 2024-06-20 13:25:29 +08:00 @Ayanokouji 非常感谢, 这个项目依赖的组件正是我喜欢的, bulma |
7 cokyhe 2024-06-20 14:47:51 +08:00 |
9 Kisesy 2024-07-01 00:14:38 +08:00 可以用 https://github.com/kalafut/entemplate 这个扩展了 extends 语法,就是在 a.html 指定一个 layout.html ,这样执行的时候就直接 Exec a.html 就是了,并且这个库还可以设置是否自动重载 |