Hugo模板基本语法

Hugo是使用Go语言开发的,Hugo模板语法其实就是Go模板语法。

Hugo模板标签由两对花括号组成:

{{}}

.点表示当前对象:

{{ . }}

输出一个变量:

<h1>{{ .Title }}</h1>

以上例子输出Hugo页面标题。

花括号内侧两端的横线表示清除左/右侧的空白(任何不可见字符):

<h1> {{- .Title -}} </h1>

注释:

{{/* 注释内容 */}}

声明变量:

{{- $name := "背字根" -}}

修改变量的值:

{{- $name = "背字根" -}}

with关键字:

{{- with .Params.excerpt -}}
	<meta name="description" content="{{ . }}">
{{- end -}}

以上例子代码第一行会判断变量是否存在,如果存在才会执行主体中的代码。并且,在主体代码中可以用点表示当前对象,即with中的变量。

条件控制语句:

{{- if .IsHome -}}
	{{- .Site.Title }} - {{ .Title -}}
{{- else -}}
	{{- .Title }} - {{ .Site.Title -}}
{{- end -}}

以上例子判断当前页面是否为首页,根据是否首页输出不同的标题。

if语句逻辑判断:

  • eq:等于;
  • ne:不等于;
  • lt:小于;
  • le:小于等于;
  • gt:大于;
  • ge:大于等于;
  • and:逻辑与;
  • or:逻辑或;
  • not:逻辑非;

判断两个参数是否相等:

{{- if eq .URL "https://www.beizigen.com" -}}

判断第一个参数是否大于第二个参数:

{{- if gt $num 5 -}}

逻辑与示例:

{{- if and (gt $num 5) (lt $num 10) -}}

以上例子判断$num是否大于5,且小于10。

range循环遍历:

{{- range .Site.Menus.main -}}
	<li><a href="{{ .URL }}">{{ .Name }}</a></li>
{{- end -}}

需要获取索引的情况:

{{- range $index, $val := $array -}}
   {{ $index }}:{{ $val }}
{{- end -}}

只取5条数据:

{{- range first .5 .Site.Pages -}}
	<li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
{{- end -}}

函数使用示例:

<link rel="stylesheet" href="{{ relURL "css/style.css" }}" media="all">

以上示例中relUrl函数返回网站首页地址。

{{- "这是一段很长很长的文本" | truncate 10 -}}

以上示例使用truncate函数截取文字,长度为10

变量作用域:

  • if、range、with代码块中定义的变量只能在该代码块中引用;
  • 全局变量在if、range、with代码块中引用需要加前缀$;
Typora