go - 如何将基本模板扩展到其他模板

标签 go go-templates

如何扩展基本的html文件,例如:

base.html

<!DOCTYPE html>
    <html>
    <head>
        <title>My Site</title>
    </head>
    <body>
   <!-- insert html here -->
    </body>
    </html>

然后在Python Jinja2中创建一个继承该基本模板的页面,我将这样做:

main.html
{{ extend "base.html" }}

main.html现在具有来自base.html的所有HTML。然后,只要我在base.html文件中定义了一个区域以将html插入其中,就可以从main.html做到这一点,在Jinja2中,它看起来像:

base.html
    <!DOCTYPE html>
    <html>
    <head>
        <title>My Site</title>
    </head>
    <body>
   {{ block "body" }}

   {{ endblock }}
    </body>
    </html>

然后在main.html中
{{ extend "base.html" }}
{{ block "body" }}
<h1>Title</h1>
{{ endblock }}

我无法在任何Go框架中找到实现此目的的方法。他们似乎都说要“定义”一个模板,然后将HTML“组件”插入其中,我想采用另一种方法,定义一个基本HTML文件,并将其继承到要构建的其他HTML文件中,如果这有意义的话?

最佳答案

使用这些模板。

base.html:

<!DOCTYPE html>
<html>
<head>
<title>My Site</title>
</head>
<body>
{{block "body" $}}{{end}}
</body>
</html>`

main.html:
{{define "body"}}<h1>Title</h1>{{end}}

使用标准库模板包按扩展顺序解析模板;
t := template.Must(template.ParseFiles(
     "base.html", 
     "main.html"))

执行生成的模板。

Run it on the playground

关于go - 如何将基本模板扩展到其他模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60896894/

相关文章:

go - 如何使用go模板连接变量和字符串

kubernetes-helm - 在 Helm 中将字典从一个模板传递到另一个模板

templates - 模板不呈现任何内容,也没有错误,但是状态为200

templates - 多路平等测试失败

go - 字符串的条件拆分

google-app-engine - Golang 谷歌存储可恢复上传 HTTP 401

json - 从深度嵌套的 JSON 文件中提取值(维基百科 API)

GO 中的 XML 解码

go - 在 heroku 上部署 golang 应用程序,构建成功但应用程序错误

go-templates - 如何在 helm 模板中使用带有 .Values 的变量