2017-05-16 9 views
2

私はテンプレートの外側からいくつかのJavaScriptコードを挿入するhtmlテンプレートを持っています。私のテンプレートデータ構造体では、文字列フィールドJS stringを作成し、それを{{.JS}}と呼んでいます。問題は、ブラウザのすべてがエスケープされていることである。Golang:エスケープするhtmlテンプレートを停止

改行\n

<>\u003c\u003e

"されているテンプレートの内部\"

同じ記号は大丈夫ですされています。 JSフィールドをコンソールに印刷しても問題ありません。私はstringの代わりにtemplate.HTMLタイプを使用することによって解決された同様の問題を見てきました。私の場合は全く動作しません。

EDIT 1

実際のコンテキストは

<script language="JavaScript"> 
    var options = { 
     {{.JS}} 
    }; 
</script> 
+1

あなたの文字列をどこに挿入するのかという文脈がなければ、実行される 'contexts 'を知ることはできません。 https://godoc.org/html/template#hdr-Contexts – RayfenWindspear

+1

これはおそらくあなたがしなければならないことです。 https://godoc.org/html/template#hdr-Typed_Strings(AKAのドキュメントをお読みください)。 – RayfenWindspear

+0

@RayfenWindspear私はあなたの返事のためにすぐに私の質問を更新します – WORMrus

答えて

6

もそのようtemplate.JSに、フィールドの種類を変更:

type Tmpl struct { 
    // ... 
    JS template.JS 
} 

かそこらのようtemplate.JS型にstringを変換簡単な関数宣言:その後、

func toJS(s string) template.JS { 
    return template.JS(s) 
} 

として関数を登録しますFuncsメソッドを使用し、そのようにテンプレートで使用します。

{{toJS .JS}} 
3

あるtemplate.JSJSの種類を設定してみてください:

import "html/template" 

type x struct { 
     JS template.JS 
} 

ドキュメントhereを見出すことができます。

+1

うまくいきました、ありがとうございます。しかし、彼は1分速いので@mkmkoprivaの答えを選ぶ必要があります。まだまだupvoted – WORMrus

関連する問題