2

在这个例子中,我有一个 main.html 模板

<!DOCTYPE html>
<html>
<head>
  <title>Backend</title>
  <style>
    html, body {height:100%}
  </style>
</head>
<body>
  <table border="1" width="100%" height="100%">
    <tr>
      <td colspan="2" class="td-header">
        <h1>Google GO</h1>
      </td>
    </tr>
    <tr>
      <td class="td-right-content">
       {{<parsed template from children>}}
      </td>
    </tr>
    <tr>
      <td colspan="2" class="td-header">
        <h1>Footer</h1>
      </td>
    </tr>
  </table>
</body>
</html>

子部分将填充

{{}}

<table>   
  <tr>
    <th>
      Name
    </th>
    <th>
      Description
    </th>
    <th>
    </th>
  </tr>
  {{range .}}
    <tr>
      <td>
        {{.Name}}
      </td>
      <td>
        {{.Description}}
      </td>
      <td>
        <a href="/admin/forms/edit/?key={{.Key.Encode}}">Edit</a>
      </td>
    </tr>
  {{end}}
</table>

在子部分的代码中对其进行解析后。我这样做是为了消除多余的 html 和 css 并轻松管理设计。谢谢大家!

4

1 回答 1

2

一个Template对象包含一个顶级模板(这里:父模板),它可以引用在同一对象中关联的其他模板。模板具有用于参考的名称。

这可能很棘手,因为当您使用该ParseFiles函数创建一个新对象时,每个模板都使用文件的基本名称命名(并且似乎无法更改该名称)。如果给定的主文件有多个可能的子文件,这可能是不切实际的,因为您通常不想给它们提供相同的名称。

解决方案是将文件手动读取为字符串,然后将其添加到显式命名的模板中(IMO 有点麻烦,但你可以接受)。

main_temp,_ := template.ParseFiles("main.html")

cont_s,_ := ioutil.ReadFile("content1.html")

// add a new associated template to main 
cont_temp,_ := main_temp.New("content").Parse(string(cont_s))

g := Content{"Hi"}
main_temp.Execute(os.Stdout, &g)

(我跳过了示例的所有错误处理)

然后您可以{{template}}在父页面中使用该指令:

{{template "content" .}}

(或任何管道而不是.指代给的整个对象main_temp

有关更多详细信息,请参阅文本/模板文档

于 2013-01-08T19:13:46.603 回答