.Scratch
データを保存および操作するための「スクラッチパッド」として機能します。
Scratch は、Go テンプレートの世界でデータを便利に操作するために設計された Hugo の機能です。ページやショートコードのメソッドで、結果のデータが指定されたコンテキストに添付されるか、変数に格納された一意のインスタンスとして存在できます。
Scratch は当初、0.48 より前の Hugo バージョンに影響する Go テンプレートのスコープ制限
の回避策として作成されたことに注意してください。 .Scratch
の詳細な分析とコンテキストに応じた使用例については、このブログの記事
を参照してください。
コンテキストを持つ .Scratch
とローカルの newScratch
の比較
Hugo 0.43 以降、Scratch を使用する方法には、以下の 2 つあります。
ページの .Scratch
.Scratch
はページメソッドまたはショートコード メソッドとして利用可能で、指定されたページに「スクラッチ」したデータを添付します。 .Scratch
を使用するには、ページコンテキストまたはショートコード コンテキストが必要です。
{{ .Scratch.Set "greeting" "bonjour" }}
{{ range .Pages }}
{{ .Scratch.Set "greeting" (print "bonjour" .Title) }}
{{ end }}
ローカルの newScratch
Scratch インスタンスは、 newScratch
関数を使用して任意の変数に代入することもできます。この場合、ページまたはショートコードのコンテキストは必要なく、スクラッチのスコープはローカルのみになります。 以下のメソッドは、Scratch インスタンスが代入された変数から利用できます。
{{ $data := newScratch }}
{{ $data.Set "greeting" "hola" }}
メソッド
Scratch には、以下のメソッドがあります。
$scratch
に保存されていると仮定していることに注意してください。
.Set
指定されたキーの値を設定します。
{{ $scratch.Set "greeting" "Hello" }}
.Get
指定されたキーの値を取得します。
{{ $scratch.Set "greeting" "Hello" }}
----
{{ $scratch.Get "greeting" }} > Hello
.Add
指定されたキーの既存の値 (複数可) に、指定された値を追加します。
単一の値に対して、 Add
は Go の +
演算子をサポートする値を受け付けます。あるキーに対する最初の Add
が配列またはスライスである場合、そのリストに以下の Add が追加されます。
{{ $scratch.Add "greetings" "Hello" }}
{{ $scratch.Add "greetings" "Welcome" }}
----
{{ $scratch.Get "greetings" }} > HelloWelcome
{{ $scratch.Add "total" 3 }}
{{ $scratch.Add "total" 7 }}
----
{{ $scratch.Get "total" }} > 10
{{ $scratch.Add "greetings" (slice "Hello") }}
{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }}
----
{{ $scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"}
.SetInMap
key
、mapKey
、value
を受け取り、指定された key
に mapKey
と value
のマップを追加します。
{{ $scratch.SetInMap "greetings" "english" "Hello" }}
{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ $scratch.Get "greetings" }} > map[french:Bonjour english:Hello]
.DeleteInMap
key
と mapKey
を受け取り、指定された key
から mapKey
のマップを削除します。
{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ .Scratch.DeleteInMap "greetings" "english" }}
----
{{ .Scratch.Get "greetings" }} > map[french:Bonjour]
.GetSortedMapValues
key
から mapKey
でソートした値の配列を返します。
{{ $scratch.SetInMap "greetings" "english" "Hello" }}
{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
----
{{ $scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]
.Delete
指定されたキーを削除します。
{{ $scratch.Set "greeting" "Hello" }}
----
{{ $scratch.Delete "greeting" }}
.Values
生のバッキング マップを返します。 このメソッドは、newScratch
を介して取得したローカル スコープの Scratch インスタンスでのみ使用する必要があることに注意してください。 同時実行の問題が発生するため、.Page.Scratch
などでは使用しないでください。