Gin无法渲染继承的模板结构。

huangapple go评论81阅读模式
英文:

Gin not rendering inherited template structure

问题

我有一个应用程序,其中我尝试使用从基本布局派生的多个模板。

当应用程序启动时,模板加载正常,但当我导航到应用程序时,出现以下情况:

  1. 如果我指定一个模板文件,则为空白。
  2. 如果我使用模板中指定的值来指定内容,则只显示特定内容。

以下是代码示例:

base.tmpl.html

{{define "base"}}
<html>
    <head>
       some title
    </head>
    <body>
        {{ template "content" . }}
    </body>
    <footer>
        {{ template "footer" . }}
    </footer>
</html>
{{end}}

footer.tmpl.html

{{define "footer"}}

<h1>Footer</h1>

{{end}}

home.tmpl.html - 这是我尝试渲染的页面。

{{ define "content" }}
<h1>test</h1>
{{ end }}

这是路由部分。当我指定 "content" 时,h1 标签中会显示 'test',但没有底部或基本布局中的 'some title'。当我指定 home.tmpl.html 时,视图为空白。

对于这两种情况都没有生成错误,并且响应返回 200 OK。

func GetIndex(c *gin.Context) {
    c.HTML(http.StatusOK, "content", gin.H{
        "title": "Home Page",
    })
}

我是这样加载模板的:

func main() {
    router := setupRouter()
    router.Run()
}

func setupRouter() *gin.Engine {
    router := gin.Default()
    files, err := filepath.Glob("templates/*")
    if err != nil {
        log.Fatal(err)
    }
    tmpl := template.Must(template.New("").ParseFiles(files...))
    router.SetHTMLTemplate(tmpl)
    router.StaticFS("/static", http.Dir("static"))

    router.SetTrustedProxies([]string{"*"})
    routes.InitializeRoutes(&router.RouterGroup)
    return router
}

希望对你有所帮助!

英文:

componentsI have an app in which I am trying to use multiple templates derived from a base layout.

The templates load ok when the app launch but when I navigate to the app it is either:

  1. Blank when I specify a template file
  2. Shows only the specific content when I use the value specified in a templates "define" parameter.

base.tmpl.html

{{define &quot;base&quot;}}
&lt;html&gt;
    &lt;head&gt;
       some title
    &lt;/head&gt;
    &lt;body&gt;
        {{ template &quot;content&quot; . }}
    &lt;/body&gt;
    &lt;footer&gt;
        {{ template &quot;footer&quot; . }}
    &lt;/footer&gt;
&lt;/html&gt;
{{end}}

footer.tmpl.html

{{define &quot;footer&quot;}}

&lt;h1&gt;Footer&lt;/h1&gt;

{{end}}

home.tmpl.html - This is the page I am trying to render.

{{ define &quot;content&quot; }}
&lt;h1&gt;test&lt;/h1&gt;
{{ end }}

This is the route. When I specify "content" I get 'test' within the h1 tags but without the footer or 'some title' from the base. When I specify home.tmpl.html the view is blank.

There are no errors generated for either and the responses return 200 OK.

func GetIndex(c *gin.Context) {
	c.HTML(http.StatusOK, &quot;content&quot;, gin.H{
		&quot;title&quot;: &quot;Home Page&quot;,
	})
}

I am loading the templates like so:

func main() {
	router := setupRouter()
	router.Run()
}

func setupRouter() *gin.Engine {
	router := gin.Default()
	files, err := filepath.Glob(&quot;templates/*&quot;)
	if err != nil {
		log.Fatal(err)
	}
	tmpl := template.Must(template.New(&quot;&quot;).ParseFiles(files...))
	router.SetHTMLTemplate(tmpl)
	router.StaticFS(&quot;/static&quot;, http.Dir(&quot;static&quot;))

	router.SetTrustedProxies([]string{&quot;*&quot;})
	routes.InitializeRoutes(&amp;router.RouterGroup)
	return router
}

答案1

得分: 1

以下是翻译好的内容:

以下设置解决了问题:

  1. base.tmpl.html 重命名为 base.layout.tmpl

    {{define "base"}}
     <html>
         <head>
            一些标题
         </head>
         <body>
             {{block "content" .}}
    
             {{end}}
         </body>
         {{template "footer" .}}
     </html>
    {{end}}
    
  2. home.tmpl.html

    {{template "base" .}}
    {{define "content"}}
        <h1>测试</h1>
    {{ end }}
    
  3. footer.tmpl.html

    {{define "footer"}}
    
     <footer>
         <h1>页脚</h1>
     </footer>
    
     {{end}}
    
英文:

The following setup resolved the issue

  1. Rename base.tmpl.html to base.layout.tmpl

    {{define &quot;base&quot;}}
     &lt;html&gt;
         &lt;head&gt;
            some title
         &lt;/head&gt;
         &lt;body&gt;
             {{block &quot;content&quot; .}}
    
             {{end}}
         &lt;/body&gt;
         {{template &quot;footer&quot; .}}
     &lt;/html&gt;
    {{end}}
    
  2. home.tmpl.html

    {{template &quot;base&quot; .}}
    {{define &quot;content&quot;}}
        &lt;h1&gt;test&lt;/h1&gt;
    {{ end }}
    
  3. footer.tmpl.html

    {{define &quot;footer&quot;}}
    
     &lt;footer&gt;
         &lt;h1&gt;Footer&lt;/h1&gt;
     &lt;/footer&gt;
    
     {{end}}
    

huangapple
  • 本文由 发表于 2023年2月25日 02:53:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/75560342.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定