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 に答える