hugo.Store
返回一个全局作用域的持久数据结构,用于存取与操作键值对。
(0.139.0 新增)
用法
用 hugo.Store 函数创建一个全局作用域的持久数据结构,用于存取与操作键值对。若要创建其它作用域的数据结构,请参见下文的作用域一节。
方法
在数据结构上使用以下方法。
Set- 设置给定键的值。
{{ hugo.Store.Set "greeting" "Hello" }} Get- (
any)获取给定键的值。{{ hugo.Store.Set "greeting" "Hello" }} {{ hugo.Store.Get "greeting" }} → Hello Add- 把给定值加到该键的现有值上。
对单值而言,
Add接受支持 Go+运算符的值。如果某个键的第一次Add传入的是数组或切片,后续的 add 会追加到该列表末尾。{{ hugo.Store.Set "greeting" "Hello" }} {{ hugo.Store.Add "greeting" "Welcome" }} {{ hugo.Store.Get "greeting" }} → HelloWelcome{{ hugo.Store.Set "total" 3 }} {{ hugo.Store.Add "total" 7 }} {{ hugo.Store.Get "total" }} → 10{{ hugo.Store.Set "greetings" (slice "Hello") }} {{ hugo.Store.Add "greetings" (slice "Welcome" "Cheers") }} {{ hugo.Store.Get "greetings" }} → [Hello Welcome Cheers] SetInMap- 接受
key、mapKey与value,把由mapKey与value组成的映射加入给定的key。{{ hugo.Store.SetInMap "greetings" "english" "Hello" }} {{ hugo.Store.SetInMap "greetings" "french" "Bonjour" }} {{ hugo.Store.Get "greetings" }} → map[english:Hello french:Bonjour] DeleteInMap- 接受
key与mapKey,从给定的key中移除mapKey对应的映射项。{{ hugo.Store.SetInMap "greetings" "english" "Hello" }} {{ hugo.Store.SetInMap "greetings" "french" "Bonjour" }} {{ hugo.Store.DeleteInMap "greetings" "english" }} {{ hugo.Store.Get "greetings" }} → map[french:Bonjour] GetSortedMapValues- (
[]any)返回key中的值数组,按mapKey排序。{{ hugo.Store.SetInMap "greetings" "english" "Hello" }} {{ hugo.Store.SetInMap "greetings" "french" "Bonjour" }} {{ hugo.Store.GetSortedMapValues "greetings" }} → [Hello Bonjour] Delete- 移除给定的键。
{{ hugo.Store.Set "greeting" "Hello" }} {{ hugo.Store.Delete "greeting" }}
作用域
创建数据结构所用的方法或函数决定它的作用域。例如,在 Page 对象上使用 Store 方法,会创建一个作用域限于该页面的数据结构。
| 作用域 | 方法或函数 |
|---|---|
| page | PAGE.Store |
| site | SITE.Store |
| global | hugo.Store |
| local | collections.NewScratch |
| shortcode | SHORTCODE.Store |
不确定的值
Store 方法常用于在 短代码 模板、由 短代码 调用的 局部模板,或 渲染钩子 模板中设置值。这三种情况下,在 Hugo 渲染页面内容之前,所存的值都是不确定的。
如果需要从父模板访问某个已存的值,而父模板尚未渲染页面内容,可以把返回值赋给一个 noop 变量来触发内容渲染:
{{ $noop := .Content }}
{{ hugo.Store.Get "mykey" }}也可以用 ContentWithoutSummary、FuzzyWordCount、Len、Plain、PlainWords、ReadingTime、Summary、Truncated 与 WordCount 方法来触发内容渲染。例如:
{{ $noop := .WordCount }}
{{ hugo.Store.Get "mykey" }}