Gin gonic 模板覆盖部分模板

Raz*_*ooo 7 html go go-gin

我正在使用杜松子酒 Gonic 及其功能。一种是 html 模板渲染。因此,本着 DRY 的精神,我想创建一个base.html包含所有常见 html 标签等的模板,并为不同的页面主体提供一个插槽。

从本质上来说,这就是base.html

{{define "base"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

{{ template "main" . }}

</body>
</html>
{{end}}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个名为的“子”模板home.html

{{template "base" .}}

{{define "main"}}
    <div class="container mt-5">
        Hello
    </div>
{{end}}
Run Code Online (Sandbox Code Playgroud)

我按照这个页面上的这个精彩指南进行操作,它很有魅力。

问题

但是当我尝试添加另一个具有不同主体的页面时,例如subpage.html

{{template "base" .}}

{{define "main"}}
<div class="container">
    <div>
        <h2>This page is still in progress</h2>
    </div>
</div>
{{end}}
Run Code Online (Sandbox Code Playgroud)

LoadHTMLFilesgins或选取的最后一个模板LoadHTMLGlob将显示在每个页面上。在这种情况下,这就是subpage.html内容。我该如何解决。默认情况下是否有可能实现这种行为?

mko*_*iva 5

你可以这样做:

base.html

{{ define "top" }}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
{{ end }}

{{ define "bottom" }}
</body>
</html>
{{ end }}
Run Code Online (Sandbox Code Playgroud)

home.html

{{ template "top" . }}

<div class="container mt-5">
    Hello
</div>

{{ template "bottom" . }}
Run Code Online (Sandbox Code Playgroud)

subpage.html

{{ template "top" . }}

<div class="container">
    <div>
        <h2>This page is still in progress</h2>
    </div>
</div>

{{ template "bottom" . }}
Run Code Online (Sandbox Code Playgroud)

然后确保您使用的是文件的基本名称:

// in the home handler use the following
c.HTML(http.StatusOK, "home.html", data)

// in the subpage handler use the following
c.HTML(http.StatusOK, "subpage.html", data)
Run Code Online (Sandbox Code Playgroud)