登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-03-09 17:25:18 448浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《是否可以使用标准库在 Go 中嵌套模板?》,介绍一下golang,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

如何在 python 运行时获得像 Jinja 这样的嵌套模板。TBC 我的意思是我如何让一堆模板继承自基本模板,只需归档基本模板的块,就像 Jinja/django-templates 一样。是否可以仅html/template在标准库中使用。

如果这不可能,我的选择是什么。胡子似乎是一种选择,但我会错过那些微妙的功能,html/template比如上下文敏感的转义等吗?还有哪些其他选择?

(环境:Google App Engin、Go runtime v1、Dev - Mac OSx lion)

谢谢阅读。

正确答案

对的,这是可能的。Ahtml.Template实际上是一组模板文件。如果您执行此集中定义的块,则它可以访问此集中定义的所有其他块。

如果您自己创建此类模板集的地图,您将拥有与 Jinja / Django 提供的基本相同的灵活性。唯一的区别是html/template包不能直接访问文件系统,所以你必须自己解析和组合模板。

考虑以下示例,其中两个不同的页面(“index.html”和“other.html”)都继承自“base.html”:

// 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}}

以及以下模板集地图:

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"))

您现在可以通过调用呈现您的“index.html”页面

tmpl["index.html"].Execute("base", data)

你可以通过调用呈现你的“other.html”页面

tmpl["other.html"].Execute("base", data)

通过一些技巧(例如,模板文件的一致命名约定),甚至可以tmpl自动生成地图。

到这里,我们也就讲完了《是否可以使用标准库在 Go 中嵌套模板?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表