Html Gin gonic模板覆盖部分模板

Html Gin gonic模板覆盖部分模板,html,go,go-gin,Html,Go,Go Gin,我用的是杜松子酒和它的特点。如果它们是html模板呈现,则为一个。 所以,本着DRY的精神,我想创建一个base.html模板,其中包含所有常见的html标记等 用于不同页面正文的插槽 本质上,这就是base.html {{define "base"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

我用的是杜松子酒和它的特点。如果它们是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}}
我跟着这本绝妙的指南走,它就像一个魔咒

问题 但是当我尝试在
subpage.html中添加另一个具有不同正文的页面时,例如:

{{template "base" .}}

{{define "main"}}
<div class="container">
    <div>
        <h2>This page is still in progress</h2>
    </div>
</div>
{{end}}
{{模板“基”}
{{define“main”}
此页面仍在进行中
{{end}
gins
LoadHTMLFiles
LoadHTMLGlob
选择的最后一个模板将显示在每个页面上。在本例中,这是
子页面.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}}
{{define“top”}
{{end}
{{定义“底部”}
{{end}
home.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}}
{{template“top.”}
你好
{{模板“底部”}
subpage.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}}
{{template“top.”}
此页面仍在进行中
{{模板“底部”}
然后确保使用的是文件的基本名称:

//在主处理程序中使用以下命令
c、 HTML(http.StatusOK,“home.HTML”,数据)
//在子页面处理程序中,使用以下命令
c、 HTML(http.StatusOK,“subpage.HTML”,数据)

首先想到的是,你可以将底座分成两个顶部/底部或页眉/页脚,然后你的每根干线都会在顶部和底部分别调用top和bottom,而且每根干线都应该有一个唯一的名称。如果你想避免最初的问题,实际上你可以去掉“main”全部命名,只需确保每个处理程序使用模板文件的唯一基名称呈现其相应的模板。嗯,这是一种方法。但是想象一下有很多这样的子页面。我觉得效率很低。我来自django环境,它已经具备了模板继承的这些特性。什么是低效的?这实际上减少了每个模板一行代码的版本。也许你误解了我的建议,或者我误解了你的要求。我将用一个例子来回答,以使我的意思更清楚,然后你可以评论为什么它对你来说不是一个好的解决方案。请注意,你可以让你的初始模板设计工作,Go支持这一点。基本上,您不需要使用类似于
LoadHTMLFiles
/
LoadHTMLGlob
的方法来解析所有文件,并依赖其名称的唯一性来知道要呈现哪个文件,而是将解析每个特定于页面的模板文件及其依赖项,但与其他特定于页面的模板文件分开,这样,每个页面处理程序都有一个
*template.template
对象,然后从相应的处理程序执行该模板对象。