Golang 从包含的模板访问模板变量

Golang Accessing Template Variables From Included Templates

在 golang 中,我正在处理三个文件: index.html、nav.html 和 main.go

nav.html 包含以下内容:

{{ define "nav" }}
  <nav class="nav-container">
    <h1>{{ .path }}</h1>
  </nav>
{{ end }}

index.html 包含以下内容:

{{ define "index" }}
  {{ template "nav" }} <!-- Includes the nav.html file -->

  <h1>Welcome to my website. You are visiting {{ .path }}.</h1>
{{ end }}

我使用的是 Golang 的 template package along with Martini,在这种情况下这不是太重要。

我的 main.go 文件包含:

package main

import (
    "net/http"

    "github.com/go-martini/martini"
    "github.com/martini-contrib/render"
)

func main() {
    m := martiniSetup()

    m.Get("/", func(res http.ResponseWriter, req *http.Request, ren render.Render, params martini.Params) {
        parse := make(map[string]interface{})
        parse["path"] = req.URL.Path

        ren.HTML(http.StatusOK, "index", parse)
    })

    m.Run()
}

我的问题:

解析到 index 模板中的 .path 变量只能由 index 模板本身访问。

我在 index.html 中包含了使用 {{ template "nav" }}nav 模板。问题是,nav.html 无法访问 .path 变量。它只能通过索引模板访问。

有什么方法可以让所有包含的模板文件都可以访问 .path 变量,在我的例子中是 index.htmlnav.html

您可以像这样将数据作为参数传递给嵌套模板:{{ template "nav" . }} 现在可以在 define "nav" 块中访问该点。