簡體   English   中英

前往:如何管理嵌套模板?

[英]Go: How to Manage Nested Templates?

試圖以理智的方式使用模板,但我認為我認為這是錯誤的。

現“基本模板”為

{{define "base"}}<!DOCTYPE html>
<html lang="en">
<head>
{{template "head" .}}
{{template "meta" . }}

</head>
<body>
<!-- some html -->
    {{template "body" .}}   
</body>

頁面模板為

{{define "head"}}<title>{{.Title}}</title>{{end}}
{{define "body"}}<h2>{{.Title}}</h2>

<p>{{.Content}}</p>

{{end}}

我可以這樣輸出模板

package main

import (
    "database/sql"
    "github.com/gin-gonic/gin"
    "html/template"
)

func singleHandler(db *sql.DB, r *gin.Engine) gin.HandlerFunc {

    return gin.HandlerFunc(func(c *gin.Context) {

        html := template.Must(template.ParseFiles("templates/_base.tmpl", "templates/single.tmpl", "templates/meta.tmpl"))
        r.SetHTMLTemplate(html)

// get data from database

        data := struct {
            E *model.E
            M []model.M
        }{
            e,
            m,
        }

        c.Render(200, c.Engine.HTMLRender, "base", data)
    })
}

但這意味着,如果將來我為其他內容塊添加一些模板,則必須遍歷所有其他文件,並將新模板添加到template.ParseFiles(…)。 另外,我必須添加所有新代碼,以將該模板的數據填充到每個應該做其他事情的模塊中。

構造模塊和嵌套模板的預期方式是什么?

我的解決方案:

在基本模板的開頭添加注釋行,例如"templates/_base.tmpl", "templates/single.tmpl", "templates/meta.tmpl"

讀取模板文件字符串,並將其動態傳遞給template.ParseFiles()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM