模板变量

变量是存储数据的容器

变量

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

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

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

特殊的点

{{ . }}

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

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

例子一:

{{ $title := .Site.Title }}
{{ range .Params.tags }}
  <li>
    <a href="{{ $baseurl }}/tags/{{ . | urlize }}">{{ . }}</a>
    - {{ $title }}
  </li>
{{ 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.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,站点的,还是文章的,还是列表的?
  • 导航怎么而来,怎么更新,怎么支持中文?

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