回答

收藏

是否可以使用标准库在 Go 中嵌套模板?

技术问答 技术问答 273 人阅读 | 0 人回复 | 2023-09-12

我如何在 python 运行时获得像 Jinja 嵌套模板。TBC 我的意思是,我如何让一堆模板继承自一个基本模板,只在基本模板块中归档,就像 Jinja/django-templates 那样。是否可以仅html/template使用标准库。
8 Y, W0 o& z! D6 C$ |假如不可能,我的选择是什么?Mustache 似乎是一个选择,但我会错过那些好的微妙功能吗?html/template比如上下文敏感的转义?还有哪些选择?
# b! Y- c* g+ _' y! H. O  y; a                                                               
0 s* r) l; k& l2 c6 y* a0 q- w; P    解决方案:                                                               
+ @- z3 D* {2 m2 u                                                                是的,这是可能的。Ahtml.Template它实际上是一组模板文件。如果您执行此集中定义块,它可以访问此集中定义的所有其他块。" r. a3 l" T, `* n
如果你创建了这样一个模板集的地图,它基本上是 Jinja / Django 提供的灵活性。唯一的区别是html/template包不能直接访问文件系统,所以你必须自己分析和组合模板。; n7 n, l; _0 U/ B7 P% }& {6 b
考虑以下两个不同的页面(index.html”和“other.html)例子,他们都继承了base.html”:
4 I# c0 M, {6 o0 f  {1 j9 {
    // Content of base.html:{{define "base"}}  {{template "head" .}}  {{template "body" .}}{{end}}// Content of index.html:{{define "head"}}index{{end}}{{define "body"}}index{{end}}// Content of other.html:{{define "head"}}other{{end}}{{define "body"}}other{{end}}4 U4 W  i) F+ k/ ]) b7 G1 _
以下模板集地图:
- J5 x! d; j# C9 s5 z
    tmpl := make(map[string]*template.Template)tmpl["index.html"] = template.Must(template.ParseFiles("index.html","base.html"))tmpl["other.html"] = template.Must(template.ParseFiles("other.html","base.html"))0 ^. K1 m: R. ~$ f$ P
你现在可以通过调用来呈现你的index.html”页面
+ }3 A7 s. j9 u" z/ T
    tmpl["index.html"].Execute("base",data)
    7 V3 F' O/ T3 B- }2 k* b& u
你可以通过调用来呈现你的other.html”页面
9 m& k- i# j) a& M6 d6 L( w2 v
    tmpl["other.html"].Execute("base",data)3 ?0 I/ x. [* k& D* E# g
甚至可以使用一些技能(如模板文件的一致命名协议)tmpl地图自动生成。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则