2016-12-20 8 views
1

Goのhtml/templateを使用して解析された、私のすべての管理/システム値を含む構造体をビューに渡したいと思います。たとえば、.IsAuthenticatedと.IsAdminを明示的にハンドラを通さずに、デフォルトでビューに与えたいとします。ハンドラーの外側にあるhtml/templateに値を渡す

ハンドラを経由せずに、これらの値をデフォルトで常に使用できるようにすることはできますか?私はフォーム値と他のユーザー生成コンテンツをハンドラを介して渡したいと思います。

答えて

2

アプリケーションがテンプレートに値を渡すことなく、テンプレートがadmin/system構造体にアクセスすることはできません。値を渡す便利な方法は、各ビュータイプの匿名フィールドを使用する方法です。ここでは例です:

func myHandler(w http.Response, r *http.Request) { 
    var data = struct { 
    *AdminSystemStuff 
    AFieldSpecificToThisView string 
    AnotherViewField string 
    }{ 
    getAdminSystemStuff(r), 
    "hello", 
    "world" 
    } 
    err := t.Execute(w, &data) // t is the compiled template. 
    if err != nil { 
    // handle error 
    } 
} 

AdminStuffはあなたの管理者やシステムデータを含む構造体であるとgetAdminSystemStuff(*http.Request)が要求から構造体へのポインタを取得する機能であり、このようなビューのデータを定義すると仮定すると

あなたは、このようなテンプレートでこれを使用することができます:私は私の例アプリにこれを追加しようとしました

<html> 
<body> 
Here are some fields: {{.AFieldSpecificToThisView}} {{.AnotherViewField}} 
{{if .IsAuthenticated}}The user is authenticated{{end}} 
</body> 
</html> 
+0

が、私は特定のコンポーネントがどこに行くかわからないんだけど、あなたはファイル名を掲載いただけません(たとえば、構造体として。)各セクションのために私はこれを再現する方法を見ることができますか?私は非常に新しいです! – dingalingchickenwiing

+0

改訂ありがとうございました - これは現在どのように動作しているのですか? – dingalingchickenwiing

関連する問題