2016-12-23 4 views
0

奇妙な探している質問のために私を許してください。私は、1つのステートメントで自分の問題をどのように述べるかを正確にはわかりませんでした。golangで異なるインターフェイスを使用して1つのWebページで複数のテンプレートを実行するにはどうすればよいですか?

私のウェブページ、ヘッダー、レイアウト、フッターには3つのテンプレートがあります。

テンプレートのヘッダーには、カテゴリのドロップダウンメニューがあり、私のゴーコードにサブメニューアイテムの文字列があります。

Categories := []string{"Holiday","IQ","Future"} 

と私が行うとき、テンプレートヘッダは

<div class="ui dropdown item"> 
    <i class="browser icon"></i> 
    Categories 
    <i class="dropdown icon"></i> 
    <div class="menu">    
    {{range $i,$e:= .}} 
    <a class="item"><i class="hashtag icon"></i>{{$e}}</a> 
    {{end}} 
    </div> 
</div> 

ので、htmlコードを以下している、

t,err :=template.ParseFiles("template/header.html","template/index.html","template/footer.html") 
t.ExecuteTemplate(w,"header",Categories) 

それは私に素敵な探してヘッダを与えますが、私は

を行う必要があります
t.ExecuteTemplate(w,"layout",Featured) 

メインページです。レイアウトテンプレートは次の構造を持っています

some html code 
{{template "header"}} 
more html code 
{{template "footer"}} 

両方の実行テンプレートステートメントを併用すると明らかに2つの異なるヘッダーが表示されます。

テンプレートレイアウトからテンプレートヘッダーを削除すると、視覚的な出力は完璧ですが、htmlコードを見ると、メニューバーは "リンクrel"ステートメントの上になります(覚えておいてください。レイアウトテンプレートの{{template "header"}})、それは明らかに良くありません。

両方のテンプレートがそれぞれの構造体を使用して同時に実行されるようにするにはどうすればよいですか?

答えて

1

ヘッダーテンプレートを編集して、それ以上のものをすべて含むようにして、それに応じて私のゴーコードを変更しました。私は実際にそれの上にいくつかのCSSとスクリプトの参照を持っていた。すべてのページで異なるようになっていたので、ヘッダーにnav_barのみを含めましたが、この問題を解決するために考えました。

私は

type Header struct{ 
    Css []string; 
    Title string; 
    Js []string; 
    Categories []string; 
} 

新しい構造体を作り、これが私のヘッダーテンプレート

{{range $i,$e:=.Css}} 
<link rel="stylesheet" type="text/css" href="{{$e}}"> 
{{end}} 
{{range $i,$e:=.Js}} 
<script src="{{$e}}"></script> 
{{end}} 

の一部である私は、それぞれのヘッダインタフェースで最初のヘッダーでテンプレートの一部を実行し、その後、別の実行でしたそれぞれのインタフェースを持つテンプレート。また、私はindex.htmlから{{template "header"}}部分を削除しなければなりませんでした。結果は今完璧に見え、私が望むように働いています。

関連する問題