Hugo Functions文档翻译
函数
Go模板是轻量级的,但可扩展的。Go本身提供了内置函数,包括比较运算符和其他基本工具。这些都列在Go模板文档中。Hugo为基本的模板逻辑添加了额外的函数。
.AddDate
返回将给定的年、月、日数添加到给定的time.Time值中的相应时间。
语法:
|
|
|
|
当添加月份或年份时,如果产生的日期不存在,Hugo会将最终的time.Time值标准化。例如,在1月31日的基础上增加一个月,产生3月2日或3月3日,这取决于年份。
请看Go团队的解释。
|
|
.Format
根据Go的布局字符串对内置的hugo日期—-.Date
、.PublishDate
和.Lastmod
—-进行格式化。
语法:
|
|
.Format
将格式化在你的前言中定义的日期值,并可作为以下页面变量的属性使用。
.PublishDate
.Date
.Lastmod
假设在内容文件的前言中有date: 2017-03-03
,你可以在构建时通过.Format
和一个布局字符串来运行你所需要的输出。
|
|
对于在你的前言中定义的任何日期的字符串表示的格式化,请参阅dateFormat
函数,它仍将利用下面解释的Go布局字符串,但使用的语法略有不同。
Go的布局字符串
Hugo模板通过指向特定参考时间的布局字符串格式化你的日期。
|
|
虽然这看起来很随意,但MST
的数值是07
,从而使布局字符串成为一串数字。
|
|
hugo日期和时间模板参考
下面的例子显示了布局字符串,然后是渲染的输出。
这些例子是在CST中渲染和测试的,并且都指向内容文件中的同一个字段。
|
|
.Date
(i.e. called via page variable)
Returns: 2017-03-03 14:15:59 -0600 CST
|
|
Returns: Friday, March 3, 2017
|
|
Returns: Fri Mar 3 2017
|
|
Returns: March 2017
|
|
Returns: 2017-03-03
|
|
Returns: Friday
"02 Jan 06 15:04 MST"
(RFC822)
Returns: 03 Mar 17 14:15 CST
"02 Jan 06 15:04 -0700"
(RFC822Z)
Returns: 03 Mar 17 14:15 -0600
"Mon, 02 Jan 2006 15:04:05 MST"
(RFC1123)
Returns: Fri, 03 Mar 2017 14:15:59 CST
"Mon, 02 Jan 2006 15:04:05 -0700"
(RFC1123Z)
Returns: Fri, 03 Mar 2017 14:15:59 -0600
更多的例子可以在Go的时间包的文档中找到。
红心数和序数的缩写
目前不支持拼出的心数(如 “1”、“2"和 “3”)。
目前不直接支持序数缩略语(即短后缀,如 “1st”、“2nd"和 “3rd”)。通过使用{{.Date.Format "Jan 2nd 2006"}}
,Hugo假定你想将nd
作为字符串附加到月份的日期上。不过,你可以把函数串联起来,形成这样的结果。
|
|
这将输出:
|
|
使用.Local
和.UTC
结合dateFormat
函数,你也可以将你的日期转换为UTC或本地时区。
|
|
Returns: 03 Mar 17 20:15 UTC
|
|
Returns: 03 Mar 17 14:15 CST
.Get
访问shortcode
声明中的位置和顺序参数。
语法:
|
|
|
|
.Get
是在创建你自己的shortcode
模板时专门使用的,用来访问传递给它的位置和命名参数。当使用一个数字INDEX时,它查询位置参数(从0开始)。与一个字符串KEY一起使用,它查询命名参数。
当访问一个不存在的命名参数时,.Get
返回一个空字符串,而不是中断构建。在hugo 0.40及以后的版本中,位置参数也是如此。这允许你将.Get
与if
、with
、default
或cond
链接,以检查参数是否存在。例如,你现在可以使用。
|
|
.GetPage
获取给定路径的页面。
语法:
|
|
.GetPage
返回一个给定路径的页面。Site
和Page
都实现了这个方法。如果给定的是一个相对路径—即没有前导符的路径—Page
变体将尝试寻找相对于当前页面的页面。
注意:我们在Hugo 0.45中全面简化了
.GetPage
API。在此之前,除了路径之外,你还需要提供一个Kind属性,例如{{ .Site.GetPage "section" "blog" }}
。这仍然可以工作,但现在是多余的了。
|
|
当找不到页面时,这个方法将返回nil
,所以如果没有找到博客部分,上述方法将不会打印任何东西。
要在博客部分找到一个普通的页面:
|
|
而由于Page
也提供了一个.GetPage
方法,所以上面的写法与下面的写法一致:
|
|
.GetPage
和多语言网站
前面的例子都是用完整的内容文件名来查找帖子的。根据你组织内容的方式(你是否在文件名中加入了语言代码,例如my-post.en.md
),你可能想做不带扩展名的查询。这将使你得到该网页的当前语言的版本。
|
|
.GetPage
示例
这个代码片断–以部分模板的形式–允许你做以下事情。
- 抓取你的标签分类法的索引对象。
- 将此对象分配给一个变量,
$t
- 按流行程度对与分类法相关的术语进行排序。
- 抓取分类法中最受欢迎的两个术语(即分配给内容的两个最受欢迎的标签。
|
|
.GetPage
on Page Bundle
如果由.GetPage
检索的页面是一个Leaf Bundle,并且你需要获得其中的嵌套页面资源,你将需要使用.Resources
中的方法,如页面资源部分所解释的。
见Headless Bundle文档中的例子。
.HasMenuCurrent
语法:
|
|
.HasMenuCurrent
是Page
对象的一个方法,返回一个布尔值。如果该PAGE与给定菜单中MENUENTRY下的一个子菜单条目中的.Page
是同一个对象,它将返回true。
v0.86.0
中的新内容。如果MENUENTRY的.Page
是一个部分,那么从Hugo 0.86.0
开始,这个方法对该部分的任何后裔也返回真。
你可以在菜单模板中找到它的使用实例。
.IsMenuCurrent
语法:
|
|
.IsMenuCurrent
是Page
对象中的一个方法,返回一个布尔值。如果PAGE与给定菜单中MENUENTRY中的.Page
是同一个对象,它返回真。
你可以在菜单模板中找到它的使用实例。
.Param
在你的模板中调用页面或网站变量。
语法:
|
|
在Hugo中,你可以声明全站的参数(即在你的配置中),也可以声明单个页面的参数。
一个常见的用例是为网站设定一个一般的值,为某些页面设定一个更具体的值(例如,一个图片)。
你可以使用.Param
方法来调用这些值到你的模板中。下面将首先在特定内容的前言中寻找一个图像参数。如果没有找到,Hugo将在你的网站配置中寻找一个图像参数。
|
|
Param
方法可能不会把内容前言的空字符串视为 “未找到”。如果你使用Hugo的原型将预设的前述字段设置为空字符串,最好使用default
函数而不是Param
。参见GitHub上的相关问题。
.Render
取一个视图,在渲染内容时应用。
语法:
|
|
视图是一个替代的布局,应该是一个文件名,指向内容视图文档中指定的一个位置的模板。
这个功能只有在应用于列表上下文中的单一内容时才可用。
这个例子可以使用位于/layouts/_default/summary.html
的内容视图来渲染一段内容。
|
|
.RenderString
渲染标记为HTML。
语法:
|
|
0.62.0
版的新内容.RenderString
是Page
上的一个方法,它使用为该页面定义的内容渲染器(如果没有在选项中设置)将一些标记渲染成HTML。
该方法需要一个带有这些选项的可选地图参数:
display ("inline")
inline
或block
。如果是inline
(默认),短文段周围的<p></p>
将被修剪。
markup (默认为页面的标记)
见内容格式列表中的标识符。
一些例子:
|
|
v0.93.0
中的新功能
注意:markdownify
使用这个功能是为了支持Render Hooks
。
.Scratch
作为一个 “scratchpad “来存储和处理数据。
Scratch是Hugo的一项功能,旨在方便地在Go模板世界中操作数据。它既可以是一个页面或简码方法,所产生的数据将被附加到给定的上下文中,也可以作为一个独特的实例存储在一个变量中。
请注意,
Scratch
最初是为了解决影响0.48之前的Hugo版本的变通办法模板范围限制而创建的。关于.Scratch
和上下文用例的详细分析,请参阅这篇博文。
上下文的.Scratch
与本地的newScratch
对比
从Hugo 0.43开始,有两种不同的方式来使用Scratch。
页面的.Scratch
.Scratch
可以作为一个页面方法或一个Shortcode
方法使用,并将 “scratched “数据附加到给定的页面。使用.Scratch
需要一个页面或一个Shortcode
上下文。
|
|
本地的newScratch
v0.43
中的新内容
一个Scratch实例也可以使用newScratch
函数分配给任何变量。在这种情况下,不需要页面或Shortcode
的上下文,而且scratch
的范围也只是本地的。下面详述的方法可以从Scratch实例被分配到的变量中获得。
|
|
方法
一个Scratch有以下方法。
请注意,下面的例子假设一个本地的Scratch实例已经存储在$scratch
中。
.Set
方法
设置一个给定的键的值。
|
|
.Get
方法
获取一个给定的键的值。
|
|
.Add
方法
将一个给定的值添加到给定键的现有值中。
对于单个值,Add
接受支持Go的+
运算符的值。如果一个键的第一次添加是一个数组或切片,下面的添加将被附加到该列表中。
|
|
|
|
|
|
.SetInMap
方法
接受一个key
,mapKey
和value
,并将mapKey
和value
的map添加到给定的key
中。
|
|
.DeleteInMap
方法
接受一个key
和mapKey
,从给定的key
中删除mapKey
的map。
|
|
.GetSortedMapValues
方法
返回一个按mapKey
排序的key
的值数组。
|
|
.Delete
方法
v0.38
中的新功能
删除给定的键。
.Values
方法
返回原始的支持map。注意,你应该只在你通过newScratch
获得的本地范围的Scratch实例上使用这个方法,而不是.Page.Scratch
等,因为这将导致并发问题。
.Unix
将time.Time
值转换为自Unix纪元起经过的秒数,不包括闰秒。Unix的纪元是1970年1月1日的00:00:00 UTC。
语法:
|
|
Milli
、Micro
和Nano
变量返回自Unix epoch以来经过的毫秒、微秒和纳秒的数量(分别)。
|
|
absLangURL
根据多语言网站的配置,添加带有正确语言前缀的绝对URL。
语法:
|
|
absLangURL
和relLangURL
都类似于它们的absURL
和relURL
的亲戚,但是当网站配置了不止一种语言时,会添加正确的语言前缀。
因此,对于一个网站的baseURL设置为https://example.com/hugo/,并且当前的语言是en。
|
|
absURL
基于配置的baseURL
,创建一个绝对的URL。
语法:
|
|
absURL
和relURL
都考虑了你的网站配置文件中的baseURL
的配置值。给定一个baseURL设置为https://example.com/hugo/。
|
|
最后两个例子可能看起来很奇怪,但可能非常有用。例如,下面显示了如何在JSON-LD结构化数据(SEO)中使用absURL
,在这种情况下,你的一段内容的一些图片可能会或可能不会被托管在本地。
|
|
上面使用了apply
函数,也暴露了Go模板解析器如何对<script>
标签内的对象进行JSON编码。关于如何告诉Hugo不对此类标签内的字符串进行转义,请参阅safeJS模板函数的例子。
absURL
和relURL
对丢失的/
很聪明,但如果不存在/
,它们不会将其添加到URL中。
after
在将一个数组切成仅在第N个项目之后的项目后。
语法:
|
|
以下是与slice
函数结合使用after
的情况。
|
|
after
与first
的例子:第2-4个最近的文章
你可以将after
与first
函数和Hugo强大的排序方法结合使用。让我们假设你在example.com/articles
有一个列表页。你有10篇文章,但你希望你的列表/栏目页的模板只显示两行。
- 最上面一行的标题是 “精选”,只显示最近发表的文章(即按内容文件中的
publishdate
)。 - 第二行的标题是 “最近的文章”,只显示最近发表的第二至第四篇文章。
|
|
anchorize
接受一个字符串,并以与defaultMarkdownHandler
对markdown
头的处理相同的方式对其进行处理。
语法:
|
|
如果Goldmark
被设置为defaultMarkdownHandler
,处理逻辑就会遵守markup.goldmark.parser.autoHeadingIDType
的设置。
由于defaultMarkdownHandler
和这个模板函数使用相同的处理逻辑,你可以使用后者来确定一个标题的ID,以便用锚标签进行链接。
|
|
append
append将一个或多个值追加到一个切片中,并返回结果切片。
语法:
|
|
|
|
一个追加单个值的例子:
|
|
同样的例子,将一个切片追加到另一个切片。
|
|
append
函数适用于所有类型,包括Page
。
apply
给定一个map
、array
或slice
,apply
返回一个新的slice
并在其上应用一个函数。
语法:
|
|
apply
期望至少有三个参数,这取决于被应用的函数。
- 第一个参数是要操作的序列。
- 第二个参数是字符串形式的函数名称,它必须是一个有效的Hugo函数的名称。
- 然后,提供应用函数的参数,用字符串
". "
代表函数要应用的序列的每个元素。
下面是一个内容文件的例子,其中有name:
作为前言字段。
|
|
然后你可以按以下方式使用apply
。
|
|
这将得到以下结果:
|
|
这大致上相当于使用以下的range
:
|
|
然而,不可能向delimit
函数提供一个范围的输出,所以你需要apply
它。
如果你有post-tag-list.html
和post-tag-link.html
作为partials
,你可以分别使用以下片段:
|
|
|
|
这样可行,但post-tag-list.html
的复杂性相当高。Hugo模板需要对只有一个标签的情况进行特殊处理,而且它必须把最后一个标签作为特殊处理。此外,由于HTML的生成方式和浏览器的解释方式,标签列表将呈现为Tags: tag1 , tag2 , tag3
这样的内容。
这个layouts/partials/post-tag-list.html
的第一个版本将所有的操作分开,以方便阅读。接下来显示的是合并后的、更简化的版本。
|
|
现在在完成的版本中,你可以对标签进行排序,用layouts/partials/post-tag-link.html
将标签转换为链接,去掉游离的换行符,并将标签连接到一个带分隔符的列表中以便展示。下面是前面的例子的一个简化的版本。
|
|
当通过一个管道接收序列作为参数时,apply
不工作。
base64
base64Encode
和base64Decode
让你轻松地用base64编码解码内容,反之则通过管道解码。
语法:
|
|
|
|
一个例子:
|
|
|
|
你也可以把其他数据类型作为参数传给模板函数,模板函数会尝试转换它们。下面将把42从一个整数转换成一个字符串,因为base64Encode
和base64Decode
总是返回一个字符串。
|
|
base64
与API的关系
如果我们必须处理来自API的响应,使用base64解码和编码就变得非常强大。
|
|
GitHub API 的响应包含 Hugo 仓库中 README.md 的 base64 编码版本。现在我们可以对其进行解码并解析Markdown。最终的输出结果将与 GitHub 上的渲染版本相似。
chomp
删除任何尾部的换行字符。
语法:
|
|
在一个管道中,用于移除由其他处理(例如markdownify)添加的新行。
|
|
complement
collections.Complement
(别名:complement
,补集)给出了一个集合中不在任何其他集合中的元素。
语法:
|
|
例子:
|
|
以上是对主页的一个想象中的用例,你想在页面的不同地方用栏目/框显示不同的页面列表。5个来自news
,5个来自blog
,然后是其他列表中没有显示的10个页面,作为补集。
cond
返回两个参数中的一个,取决于第三个参数的值。
类似三元运算符。
语法:
|
|
cond
如果CONTROL为真,则返回VAR1,如果不是,则返回VAR2。
例子:
|
|
如果$geese
数组中正好有1个项目,将发出 “goose”,否则将发出 “geese”。
每当你使用
cond
函数时,两个变量表达式总是被评估。这意味着像cond false (div 1 0) 27
这样的用法会产生一个错误,因为即使条件是假的,div 1 0
也会被评估。
换句话说,
cond
函数不提供短路求值,也不像普通的三元操作符那样,如果条件返回为false
,就会把第一个表达式传递过去。
countrunes
确定一个字符串中的字符数量,不包括任何空白符。
语法:
|
|
countwords
函数计算字符串中的每一个字,与此相反,countrunes
函数确定内容中字符的数量,并排除任何空白字符。如果你处理的是类似中日韩的语言,这有特别的用处。
|
|
countwords
计算一个字符串中的字数。
语法:
|
|
该模板功能的作用类似于.WordCount
页面变量。
|
|
default
允许设置一个默认值,如果没有设置第一个值,返回默认值。
语法:
|
|
default
检查一个给定的值是否被设置,如果没有则返回一个默认值。在这种情况下,设置的含义根据数据类型的不同而不同。
- 数字类型和时间的非零值
- 对于字符串、数组、片断和地图来说,长度不为零
- 任何布尔值或结构值
- 任何其他类型的非零值
default
函数的例子参考以下内容页。
|
|
default
,可以用多种方式来写。
|
|
上述两个default
函数调用都返回Roboto
。
然而,默认值不需要像前面的例子那样被硬编码。默认值可以是一个变量,也可以使用点符号直接从前面的内容中提取。
|
|
这将返回:
|
|
然后使用点符号:
|
|
这将返回:
|
|
下面的例子有相同的返回值,但远没有那么简练。这证明了默认值的效用。
使用if
:
|
|
使用with
:
|
|
delimit
遍历任何数组、切片或map,并返回一个由分隔符分隔的所有数值的字符串。
语法:
|
|
在你的模板中调用delimit
的形式为
|
|
delimit
遍历任何数组、切片或map,并返回一个由分隔符(即函数调用的第二个参数)分隔的所有值的字符串。有一个可选的第三个参数,让你选择一个不同的定界符,放在循环的最后两个值之间。
为了保持一致的输出顺序,map将按照键进行排序,并且只返回值的部分。
后面的delimit
的例子都使用了相同的前述内容。
|
|
|
|
|
|
下面是同一个例子,但有可选的 “最后 “分隔符。
|
|
|
|
dict
从一个键和值对的列表中创建一个字典。
语法:
|
|
dict
对于向部分模板传递一个以上的值特别有用。
注意,key
可以是一个string
,也可以是一个string slice
。后者对于创建一个深度嵌套的结构很有用,例如:
|
|
例子: 使用dict
将多个值传递给一个partial
下面的partial
创建了一个SVG,并期望从调用者那里获得填充、高度和宽度。
partial
定义
|
|
partial
调用
填充、高度和宽度的值可以用dict
存储在一个对象中,并传递给partial
。
|
|
echoParam
如果一个参数被设置,则打印该参数。
语法:
|
|
|
|
emojify
通过Emoji表情符号处理器运行一个字符串。
语法:
|
|
emoji
通过Emoji表情符号处理器运行一个传递的字符串。
关于可用的表情符号,请参见Emoji速查表。
emojify
函数可以在你的模板中调用,但默认情况下不能直接在你的内容文件中调用。对于内容文件中的表情符号,在你的网站配置中设置enableEmoji
为true
。然后你就可以直接在你的内容文件中写入表情符号速记;例如:I \:heart\: Hugo!
。
I ❤️ Hugo!
eq
返回arg1 == arg2的布尔值。
语法:
|
|
|
|
errorf and warnf
从模板中记录ERROR或WARNING。
语法:
|
|
errorf
或warnf
将评估一个格式化的字符串,然后将结果输出到ERROR或WARNING日志(每条错误信息只输出一次,以避免淹没日志)。
任何ERROR也会导致构建失败(hugo命令将退出exit -1
)。
这两个函数都返回一个空字符串,所以信息只被打印到控制台。
|
|
|
|
注意,errorf
、erroridf
和warnf
支持fmt
包的所有格式化动词。
抑制错误
有时,让用户压制一个错误并使构建成功可能是有意义的。
你可以通过使用erroridf
函数来做到这一点。这个函数需要一个错误ID作为第一个参数。
|
|
这将输出;
|
|
fileExists
检查文件或目录是否存在。
语法:
|
|
|
|
os.FileExists
函数试图解析相对于你的项目目录根的路径。如果没有找到匹配的文件或目录,它将试图解析相对于contentDir
的路径。前面的路径分隔符(/
)是可选的。
有了这个目录结构:
|
|
该函数返回这些值。
|
|
findRE
返回一个符合正则表达式的字符串列表。
语法:
|
|
默认情况下,所有的匹配将被包括在内。匹配的数量可以用一个可选的第三个参数来限制。
下面的例子返回内容中所有二级标题(<h2>
)的列表。
|
|
你可以用第三个参数来限制列表中的匹配数量。下面的例子显示了如何将返回值限制为只有一个匹配项(或者没有,如果没有匹配的子字符串)。
|
|
Hugo使用Go的正则表达式包,它与Perl、Python和其他语言使用的一般语法相同,但对于那些来自PCRE背景的人来说有一些小的区别。关于完整的语法列表,请看GitHub的re2维基。
如果你刚开始学习RegEx,或者至少是Go的风味,你可以在浏览器中练习模式匹配,网址是https://regex101.com/。
first
将一个数组切成只有前N个元素。
语法:
|
|
first
的工作方式类似于SQL中的limit
关键字。它将数组减少到只有前N个元素。它把数组和元素的数量作为输入。
first
需要两个参数:
number of elements
array
orslice of maps or structs
|
|
注意:与第一项无关,LIMIT
可以为'0’,以返回一个空数组。
使用first
和where
同时使用first
和where
可以非常强大。下面的片段只从主要部分获得一个帖子列表,按标题参数排序,然后只对该列表中的前5个帖子进行排序。
|
|
float
从传入函数的参数中创建一个浮点数。
语法:
|
|
有助于将字符串变成浮点数。
|
|
ge
返回arg1 >= arg2的布尔值。
语法:
|
|
|
|
getenv
返回一个环境变量的值,如果环境变量没有被设置,则返回一个空字符串。
语法:
|
|
|
|
例子:
|
|
你可以在建立你的网站时传递环境变量:
|
|
然后在一个模板内检索这些值:
|
|
group
group
将一个页面列表分组。
语法:
|
|
|
|
你从group
得到的页面组与你从Hugo中内置的group
方法得到的类型相同。上面的例子甚至可以进行分页。
gt
返回arg1 > arg2的布尔值。
语法:
|
|
|
|
hasPrefix
测试一个字符串是否以前缀开始。
语法:
|
|
|
|
highlight
用语法高亮器渲染代码。
语法:
|
|
|
|
高亮功能使用Chroma语法高亮器,支持200多种语言,有40多种可用样式。
Parameters
INPUT
要突出显示的代码。
LANG
要突出显示的代码的语言。从支持的语言中选择一个。不区分大小写。
OPTIONS
一个可选的、用逗号隔开的零或多个选项的列表。在站点配置中设置默认值。
Options
lineNos
Boolean. Default is false
.
在每一行的开头显示一个数字。
lineNumbersInTable
Boolean. Default is true
.
在一个有两个单元格的HTML表格中显示高亮显示的代码。左边的表格单元包含行号。右边的表格单元包含代码,允许用户选择和复制没有行号的代码。如果lineNos
为false
,则无关紧要。
anchorLineNos
Boolean. Default is false
.
将每个行号渲染成一个HTML锚点元素,并将周围<span>
的id
属性设置为行号。如果lineNos
为false
,则无关紧要。
lineAnchors
String. Default is ""
.
当把行号渲染成HTML锚点元素时,把这个值前置到周围<span>
的id
属性上。当一个页面包含两个或多个代码块时,这提供了唯一的id属性。如果lineNos
或anchorLineNos
为false
,则无关紧要。
lineNoStart
Integer. Default is 1
.
显示在第一行开头的数字。如果lineNos
为false
,则无关紧要。
hl_Lines
String. Default is ""
.
以空格分隔的要强调的代码行的列表。要强调第2、3、4和7行,将此值设置为2-4 7
。这个选项与lineNoStart
选项无关。
style
String. Default is monokai
.
应用于突出显示的代码的CSS样式。参见样式库的例子。区分大小写。
noClasses
Boolean. Default is true
.
使用内联CSS样式而不是外部CSS文件。要使用外部CSS文件,请将此值设置为false
,并使用hugo客户端生成文件。
tabWidth
Integer. Default is 4
.
在你突出显示的代码中,用这个数量的空格代替每个制表符。
guessSyntax
Boolean. Default is false
.
如果LANG
参数是空的或者是一个不被识别的语言,如果可能的话,自动检测语言,否则就使用后备语言。
你可以使用以下速记符号,而不是同时指定
lineNos
和lineNumbersInTable
lineNos=inline
相当于lineNos=true
,lineNumbersInTable=false
lineNos=table
相当于lineNos=true
和lineNumbersInTable=true
例子:
|
|
hmac
返回一个使用密钥签署信息的加密哈希值。
语法:
|
|
|
|
将HASH_TYPE
参数设置为md5
, sha1
, sha256
, 或 sha512
。
将可选的ENCODING
参数设置为十六进制(默认)或二进制。
|
|
htmlEscape
返回给定的字符串,并转义保留的HTML代码。
语法:
|
|
在结果中&
成为&
等等。它只转义<
, >,
&
, '
和 "
.
|
|
htmlUnescape
返回给定的HTML转义代码未转义的字符串。
语法:
|
|
htmlUnescape
返回给定的字符串,其中的HTML转义代码没有被转义。
如果需要完全未转义的字符,请记住将此输出传递给 safeHTML
。否则,输出将被再次转义为正常的字符。
|
|
hugo
hugo
函数提供了对Hugo相关数据的便捷访问。
语法:
|
|
hugo
返回一个包含以下函数的实例。
hugo.Generator
hugo.Generator
输出一个完整的元数据HTML标签;例如,<meta name="generator" content="Hugo 0.99.1" />
hugo.Version
你正在使用的Hugo二进制文件的当前版本,例如0.99.1
。
hugo.Environment
通过--environment
cli标签定义的当前运行环境。
hugo.CommitHash
当前Hugo二进制文件的git提交哈希值,例如0e8bed9ccffba0df554728b46c5bbf6d78ae5247
。
hugo.BuildDate
当前Hugo二进制文件的编译日期,格式为RFC 3339,例如:2002-10-02T10:00:00-05:00
hugo.IsExtended
这是否是扩展的Hugo二进制。
hugo.IsProduction
如果hugo.Environment
被设置为生产环境,则返回true
。
我们强烈建议在您网站的
<head>
中使用hugo.Generator
。hugo.Generator
默认包含在themes.gohugo.io
上托管的所有主题中。发电机标签允许Hugo团队跟踪Hugo的使用情况和受欢迎程度。
hugo.Deps
hugo.Deps
返回一个项目的依赖性列表(Hugo模块或本地主题组件)。
每个依赖项都包含:
Path (string)
返回该模块的路径。这将是模块的路径,例如 "github.com/gohugoio/myshortcodes"
,或你的/theme
文件夹下面的路径,例如 "mytheme"
。
Version (string)
该模块的版本。
Vendor (bool)
这种依赖关系是否被出售。
Time (time.Time)
创建的时间版本。
Owner
在依赖关系树中,这是第一个将该模块定义为依赖关系的模块。
Replace (*Dependency)
被这个依赖性所取代。
一个列出依赖关系的例子:
|
|
humanize
返回一个参数的人性化版本,第一个字母大写。
语法:
|
|
如果输入的是一个int64值或者是一个整数的字符串表示,humanize会返回附加了适当序号的数字。
|
|
i18n
根据你的i18n配置文件来翻译一段内容。
语法:
|
|
|
|
这是根据你的i18n/en-US.toml
文件来翻译一段内容。你可以使用go-i18n
工具来管理你的翻译。翻译可以存在于主题和版本库的根目录中。
|
|
T
是i18n
的一个别名。例如,{{ T "translation_id" }}
。
Query a flexible translation with variables
通常你会想在翻译字符串中使用页面变量。要做到这一点,在调用i18n
时要传递.
context。
|
|
该函数将把.
context传递给 "wordCount "
id:
|
|
假设.WordCount
在上下文中的值是101。其结果将是:
|
|
有关字符串翻译的更多信息,请参阅《多语言模式下的字符串翻译》。
Image Filters
images
命名空间提供了一个过滤器和其他图像相关功能的列表。
参见images.Filter,了解如何将这些过滤器应用到图像上。
Overlay
叠加创建一个过滤器,在x,y位置叠加源图像,例如:
|
|
如果你只需要应用一次过滤器,则这是上述的一个简短版本:
|
|
以上将在$img
的左上角覆盖$logo
(在x=50
,y=50
的位置)。
Text
使用Text
过滤器,你可以在图像上添加文本。
下面的例子将以指定的颜色、大小和位置将文字Hugo rocks!
添加到图片上。
|
|
如果需要,你可以加载一个自定义字体。将字体作为Hugo资源加载,并将其设置为一个选项。
|
|
Brightness
Brightness
创建一个过滤器,改变图像的亮度。百分比参数必须在(-100,100)范围内。
ColorBalance
ColorBalance
创建一个过滤器,改变图像的色彩平衡。每个颜色通道(红、绿、蓝)的百分比参数必须在(-100, 500)范围内。
Colorize
Colorize
创建一个过滤器,产生一个图像的彩色版本。色调参数是色轮上的角度,通常在(0,360)范围内。饱和度参数必须在(0,100)范围内。百分比参数指定效果的强度,它必须在(0,100)范围内。
Contrast
Contrast
创建一个过滤器,改变图像的对比度。百分比参数必须在(-100,100)范围内。
Gamma
Gamma
创建一个过滤器,对图像进行伽玛校正。伽马参数必须是正数。伽玛=1给出原始图像。小于1的伽玛会使图像变暗,大于1的伽玛会使图像变亮。
GaussianBlur
高斯模糊(GaussianBlur)创建一个过滤器,对图像进行高斯模糊处理。
Grayscale
Grayscale
创建一个过滤器,产生一个图像的灰度版本。
Hue
Hue
创建一个过滤器,旋转图像的色调。色调角的移动范围通常为-180到180。
Invert
Invert
创建一个过滤器,翻转了图像的颜色。
Pixelate
Pixelate
创建了一个过滤器,将像素化的效果应用到图像上。
Saturation
Saturation
创建一个过滤器,改变图像的饱和度。
Sepia
Sepia
创建一个过滤器,产生一个棕褐色的图像版本。
Sigmoid
Sigmoid
创建了一个过滤器,它使用一个sigmoidal
函数改变图像的对比度,并返回调整后的图像。这是一个非线性的对比度变化,对照片调整很有用,因为它保留了高光和阴影的细节。
UnsharpMask
UnsharpMask
创建一个滤镜来锐化图像。sigma
参数用于高斯函数,影响效果的半径。Sigma必须是正数。锐化半径大致等于3*sigma
。数量参数控制边缘边界变得多深和多浅。通常是在0.5和1.5之间。阈值参数控制将被锐化的最小亮度变化。通常在0到0.05之间。
Other Functions
Filter
可用于对图像应用一组过滤器:
|
|
ImageConfig
解析图像并返回高度、宽度和颜色模型。
imageConfig
函数接受一个参数,即相对于项目根目录的文件路径(字符串),可以有或没有前导斜线。
|
|
in
检查一个元素是否在一个数组或切片中,或在一个字符串中的子串中,并返回一个布尔值。
语法:
|
|
支持的元素有字符串、整数和浮点数,不过只有float64会如期匹配。
此外,in
还可以检查一个字符串中是否存在子串。
|
|
|
|
index
查找传递给它的数据结构的索引或键。
语法:
|
|
|
|
index
函数返回其第一个参数被以下参数索引的结果。每个被索引的项目必须是一个地图或一个切片,例如:
|
|
该函数以多个索引为参数,这可以用来获得嵌套的值,例如:
|
|
你可以把多个索引写成一个切片:
|
|
例子:Load Data from a Path Based on Front Matter Params
假设你想在content/vacations/
中写的每一篇文章的前言添加一个location = ""
字段。你想用这个字段在你的single.html
模板中的文章底部填入有关位置的信息。你在data/locations/
中也有一个目录,看起来像下面这样。
|
|
下面是一个例:
|
|
我们将使用的例子是一篇关于奥斯陆的文章,其前言应设置为与data/locations/
中的相应文件名完全相同的名称。
|
|
oslo.toml
的内容可以通过以下节点路径从你的模板中访问:.Site.Data.lots.oslo
。然而,你所需要的具体文件将根据前言的内容而改变。
这就是需要index
函数的地方。index
在这个用例中需要2个参数。
1. 节点路径
2. 一个对应于所需数据的字符串;例如:
|
|
.Params.location
的变量是一个字符串,因此可以取代上面例子中的oslo
。
|
|
现在,该调用将根据内容前言中指定的位置返回特定的文件,但你很可能想把特定的属性写到模板中。你可以通过点符号.
沿着节点路径继续往下走来做到这一点。
|
|
int
从传入函数的参数中创建一个int
。
语法:
|
|
有助于将字符串变成数字。
|
|
如果输入的字符串应该代表一个十进制的数字,如果它有前面的0,那么在把字符串传递给
int
函数之前,必须把这些0去掉,否则这个字符串将被尝试解析为一个八进制的数字表示。
strings.TrimLeft
函数可用于此目的。
1 2
{{ int ("0987" | strings.TrimLeft "0") }} {{ int ("00987" | strings.TrimLeft "0") }}
解释
int
函数最终调用了Go库strconv
中的ParseInt
函数。从它的文档来看。
基数是由字符串的前缀暗示的:基数16代表 “0x”,基数8代表 “0”,否则就是基数10。
intersect
返回两个数组或切片的共同元素,顺序与第一个数组相同。
语法:
|
|
一个有用的例子是,当与where
结合时,将其作为AND
过滤器使用。
AND filter in where query
|
|
以上是对非page
或about
类型的普通页面的检索,除非它们被钉住。最后,我们排除了所有在页面参数中没有设置images
的页面。
isset
如果该参数被设置,则返回真。
语法:
|
|
|
|
接受一个切片、数组或通道和一个索引或一个map和一个键作为输入。
|
|
所有站点级的配置键都以小写形式存储。因此,网站配置文件中的
myParam
键值需要用{{if isset .Site.Params "myparam"}}
访问,而不是{{if isset .Site.Params "myParam"}}
。注意,你仍然可以用.Site.Params.myParam
或.Site.Params.myparam
访问同一个配置键,例如,在使用with
时。这一限制也适用于从快捷键中访问页面级前言的键。
jsonify
将一个给定的对象编码为JSON。
语法:
|
|
|
|
Jsonify将一个给定的对象编码为JSON。
要自定义JSON的打印方式,可以在第一个参数中传递一个选项字典。支持的选项有 “prefix “和 “indent”。输出中的每个JSON元素将在一个新的行中开始,以prefix开始,后面是根据缩进嵌套的一个或多个副本的缩进。
|
|
Jsonify options
indent (””)
要使用的缩进。
prefix (””)
缩进的前缀。
noHTMLEscape (false)
禁止在JSON引号字符串中转义有问题的HTML字符。默认行为是将&
、<
和>
转义为\u0026
、\u003c
和\u003e
,以避免在HTML中嵌入JSON时可能出现的某些安全问题。
也请参见.PlainWords
、.Plain
和.RawContent
页面变量。