ホームページ  >  記事  >  バックエンド開発  >  HTML コメントが Go テンプレートに表示されないのはなぜですか?それを修正するにはどうすればよいですか?

HTML コメントが Go テンプレートに表示されないのはなぜですか?それを修正するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-02 20:52:30527ブラウズ

Why are HTML comments not displayed in Go templates and how can I fix it?

Go テンプレートで HTML コメントが表示されない - 解決済み

Go アプリケーションでは、HTML テンプレートを使用すると、HTML コメントがデフォルトでレンダリングされません。これにより、KnockoutJS のコンテナレス制御フロー構文を使用する場合など、特定のシナリオで問題が発生する可能性があります。この問題に対処するには、template.HTML を利用して、テンプレートの実行中に HTML コメントを保持できます。

template.HTML を使用する 1 つの方法は、safe() と呼ばれるカスタム テンプレート関数を定義することです。この関数は文字列を引数として受け取り、それを template.HTML として返します。 HTML コメントをsafe()関数を介して渡すことにより、安全であるとマークすることができ、テンプレートのレンダリング中にエスケープまたは省略されなくなります。

例は次のとおりです:

<code class="go">import (
    "html/template"
    "os"
)

func main() {
    t := template.Must(template.New("").Funcs(template.FuncMap{
        "safe": func(s string) template.HTML { return template.HTML(s) },
    }).Parse(src))
    t.Execute(os.Stdout, nil)
}

const src = `<html><body>
{{safe "<!-- This is a comment -->"}}
<div>Some <b>HTML</b> content</div>
</body></html>`</code>

出力:

<html><body>
<!-- This is a comment -->
<div>Some <b>HTML</b> content</div>
</body></html>

safe() 関数を利用するには、次のようにテンプレート内の HTML コメントを変更して、safe() 関数呼び出しを含めます。

<code class="html">{{safe "<!-- Some HTML comment -->"}}</code>

あるいは、パイプを使用します。演算子:

<code class="html">{{"<!-- Some HTML comment -->" | safe}}</code>

以下のように、引用符 ('"') を含む HTML コメントはエスケープする必要があることに注意してください:

<code class="html">{{safe "<!-- Some \"HTML\" comment -->"}}</code>

条件付き HTML コメントは干渉する可能性があるため推奨されません。 html/template パッケージのコンテキスト依存エスケープを使用します。

以上がHTML コメントが Go テンプレートに表示されないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。