Javascript変数を作成するHTMLページ(例:<head>
セクション)にJavaScriptコードを挿入し、テンプレート実行に渡されたパラメータでJavaScriptコードを初期化することができます。
これは、HTMLドキュメント(
Go Playground上でそれを試してみてください)、その結果
func main() {
t := template.Must(template.New("").Parse(templ))
m := map[string]interface{}{
"title": "Test page",
"username": "bob",
"counter": 12,
}
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
}
const templ = `<html><head>
<script>
var _title = {{.title}};
var _username = {{.username}};
var _counter = {{.counter}};
</script>
</head><body>
</body>
</html>`
:
<html><head>
<script>
var _title = "Test page";
var _username = "bob";
var _counter = 12 ;
</script>
</head><body>
</body>
</html>
これが何を意味するのかは、そのページ内の他のJavascriptコード(いずれかのインライン化され
この例を参照してください。外部参照)は、変数_title
,_username
,_counter
を参照し、それらを通常の変数として使用し、Template.Execute()
に渡された値で初期化されます。
html/template
パッケージがコンテキストエスケープを実行することに注意してください。 string
であるため、{{.title}}
の結果が引用符で囲まれていることを確認してください。int
の値であるため、{{.counter}}
の結果を挿入するときに引用符は追加されません。
また、他のJavascriptコードで使用される可能性のある既存の変数や変数との衝突を避けるため、固有の命名方法を使用する必要があります。通常、特別な接頭辞(または接尾辞)がそれを行います。
また、この関連の質問をチェックアウト:Referencing Go array in Javascript
私たちは本当にTemplate.Execute()を使用する必要があります。私はc.HTMLを使用した方法と同じように変数を渡すことはできませんか?これらの変数に '{{.username}} 'としてアクセスできます。あなたのようにグローバル変数として保存することはできませんか? – aaj
@ love2codeこれを使う必要はありません。単に 'c.HTML()'を使って渡すことができます。 'github.com/gin-gonic/gin'パッケージをそこにインポートすることができないので、私は' Template.Execute() 'を使ってGo Playgroundで動作します。 Javascript変数を作成して初期化する原則は重要ですが、残りはGo Playgroundで実行できるようになっています。 – icza