hugo 模板变量


原文链接: hugo 模板变量

Data 变量
注:数据以键值对形式保存在模板变量中,键由数据文件所在目录名、文件名以及变量名来决定,比如定义在数据文件 data/author/en/fiction.toml 中的变量 names ,最终在模板中通过 .Site.Data.author.en.fiction.names 来引用。

变量

变量也是比较枯燥的,大概看看就可以了,需要的时候再来细细的揣摩。

变量是用于存储数据的容器,hugo的模板神奇之处就在于这些强大的变量,它们不仅仅是配置文件中的一个属性,或者内容文件头的一个属性,内容本身,而是涵盖了很多方面的。

出生与CMS世家的hugo作者十分了解我们只做模板需要哪些变量,这些变量在hugo新版本发布的时候还在不停的增加,本中文手册适时更新。

特殊的点

{{ . }}

在hugo模板里面, 点“.” 代表的是上下文,不同的模板里面上下文环境是不同的。它可以用对象的this来理解。

在全文中的点,和在循环中的点是不一样的,如果要在循环中访问全文中的点(对象),则需要赋值给某个参数。

例子一:

{{ $title := .Site.Title }}
{{ range .Params.tags }}

  • <a href="{{ $baseurl }}/tags/{{ . | urlize }}">{{ . }}</a>
    - {{ $title }}
    


    {{ end }}

    在例子中,站点的标题”Site.Title“在range里面是访问不到的,range里面的.代表 Params.tag 对象,通过$title把站点标题传递到迭代里面。

    可以使用”$“在变量前面,在全局的范围访问变量,这是赋值给中间变量的简化方式。
    

    页面变量

    神奇的点“.”在所有的可用变量前面,千万别忘了哦!
    

    下面是页面能够使用的变量。

    .Title 内容的标题,来自于内容文件的title设置
    .Content 内容本身,来自于文件头
    .Summary 摘要,可以手动设置断点和“更多”链接
    .Truncated 布尔值,判断是否截断
    .Description 内容的描述,来自内容文件头
    .Keywords 内容的meta关键词,用于搜索引擎SEO
    .Date 内容的相关日期
    .PublishDate 内容的发布日期
    .Type 内容的类型
    .Section 内容所属章节
    .Permalink 页面永久链接
    .RelPermalink 页面相对永久链接
    .LinkTitle 设置所链接的目标的标题为链接的标题
    .Taxonomies 复数字段的分类
    .RSSLink 链接到分类的rss
    .TableOfContents 内容列表
    .Prev 上一页(基于日期)
    .Next 下一页
    .PrevInSection 上一节(基于日期)
    .NextInSection 下一节
    .FuzzyWordCount 相似的内容
    .WordCount 字数统计
    .ReadingTime 读取时间
    .Weight 权重
    .RawContent 直接读取md文件内容,排除文件头
    .Draft 布尔值,是否为草稿
    .IsNode 是字段,page都是“否”
    .IsPage 是页面,page页面都是“是”
    .Site 站点(参看下面)
    .Hugo hugo字段(参看下面)
    

    页面参数

    在任何地方都可以访问的页面参数,比如下面的标签和分类

    .Params.tags
    .Params.categories
    
    参数为自定义的,所有参数都是**小写**的。
    

    节点变量

    节点变量可以被不是详细页的其他页面调用,例如首页、列表页、分类术语页等。

    .Title 内容的标题
    .Date 内容发布日期
    .Permalink 节点永久链接
    .URL 节点的相对路径
    .Ref(ref) 返回永久链接
    .RelRef(ref) 返回永久相对链接
    .RSSLink 分类的rss链接
    .Data 这种类型的数据
    .IsHome 是否是首页,首页永远都是是
    .IsNode 是否是节点,节点永远是“是”
    .IsPage 是否是页面,节点永远是否
    .Site 站点(参看下面)
    .Hugo hugo(参看下面)
    

    分类术语变量

    .Data.Singular 术语的单数名称
    .Data.Plural 术语的复数名称
    .Data.Pages 分类列表页面
    .Data.Terms 术语自己
    .Data.Terms.Alphabetical 条目按字母排序
    .Data.Terms.ByCount 条目按名气排序
    

    站点变量 .Site

    .Site.BaseURL 站点的基本路径
    .Site.Taxonomies 整个站点的分类
    .Site.Indexes 站点版本
    .Site.Pages 以日期排序的所有内容数组
    .Site.Params 配置文件中的变量
    .Site.Sections 站点顶级目录
    .Site.Files 所有的站点资源文件
    .Site.Menus 所有的站点菜单
    .Site.Title 一个字符串表示的站点标题
    .Site.Author 配置文件定义的作者地图
    .Site.LanguageCode 一个字符串表示的站点语言
    .Site.DisqusShortname 配置文件定义的短字符串
    .Site.Copyright 字符串定义的版权信息
    .Site.LastChange 最后更新的内容
    .Site.Permalinks 配置文件复写的永久链接
    .Site.BuildDrafts 配置文件中定义的是否建立草稿
    .Site.Data 自定义数据,参看数据文件章节
    

    Hugo变量

    .Hugo.Generator 标记mate数据,便于官方跟踪.
    .Hugo.Version hugo 版本
    .Hugo.CommitHash git 二进制散列
    .Hugo.BuildDate 创建日期
    

    总结

    变量存在上下文关系,很多变量单独输出是没有任何显示的,另外需要注意变量的 首字母大写 。

    函数好比搭积木的方法,变量就是积木。熟悉了hugo模板函数和变量,已经可以尝试使用hugo的规则自己搭建积木了。

    在模板手册到这里的时候,大家是否在思考如下问题:

    模板文件怎么划分合理?
    CSS放什么地方,怎么样链接进来?
    js和js库放什么地方,怎么链接进来?
    head标签种很多信息怎么而来?
    title到底是谁的title,站点的,还是文章的,还是列表的?
    导航怎么而来,怎么更新,怎么支持中文?
    

    讲了那么多枯燥的函数和变量,下一节要来点湿漉漉的润润心灵。

  • `