Golang Go语言中有没有什么好用的 HTML 模板引擎
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" %} 但是好像几年没更新了
Golang Go语言中有没有什么好用的 HTML 模板引擎
更多关于Golang Go语言中有没有什么好用的 HTML 模板引擎的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我是用的 一个三方封装的一个: 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
用起来感觉还好,没遇到过什么问题。
参考这个项目,用 htmx
https://github.com/mikestefanello/pagoda
看着是预先定义一个 master 作为 layout 。然后动态 parse 并且 parse 之前先 parse master 。只能是这种方法了吗。
非常感谢, 这个项目依赖的组件正是我喜欢的, bulma
目前是这种,也是比较常见的一种方式。其他暂时没发现。
和 gintemplate 属于一类
可以用 https://github.com/kalafut/entemplate 这个扩展了 extends 语法,就是在 a.html 指定一个 layout.html ,这样执行的时候就直接 Exec a.html 就是了,并且这个库还可以设置是否自动重载
在Go语言中,确实存在多个好用的HTML模板引擎,其中Ace是一款值得推荐的轻量级HTML模板引擎。
Ace专为Go语言设计,深受Slim和Jade等著名模板引擎的启发,并充分利用了Go标准库html/template的强大功能。Ace模板引擎的特点包括:
- 简洁的语法:提供了一种更加直观和简洁的方式来编写HTML模板,使模板文件看起来更干净、轻便,易于阅读与维护。
- 无缝集成Go模板包:完全兼容html/template,允许嵌入html/template包的所有动作,支持模板的嵌套定义以及参数传递。
- 高效的缓存机制:提供模板解析结果的缓存功能,节省后续重复解析的时间,提高应用性能。
- 二进制模板加载:能够直接从内存中的二进制数据加载模板,适合将应用编译成单一可执行文件的场景。
此外,Ace还广泛适用于各种Go Web框架,如Martini,且兼容性良好。无论是构建简单网站,还是复杂的Web应用程序,Ace都能帮助Go Web开发者编写出结构清晰、易于维护的模板代码。
总的来说,Ace是一款高效、易用且具备强大扩展性的HTML模板引擎,是Go Web开发者的理想选择。如需更多信息,可访问Ace的项目地址进行查阅。