本文主要介绍典型的Jekyll
变量和Liquid
语法,便于博客调整时快速查阅。
一、背景
由于Jekyll
博客平台构建时需要通过Liquid
将模块转化为HTML页面。因此,为了方便后续查阅使用,本文整理了有关Jekyll
的常用变量和Liquid
的基本语法。
二、Liquid语法
1. 符号
- 输出变量:
{{ variable }}
- 表达式:
{% if statement %}
- 左侧空白字符去除:
{{-
,{%-
- 右侧空白字符去除:
-}}
,-%}
2. 标签
if
:条件判断for
:循环include
:包含另一个模版文件,默认查找_include
文件夹assign
:文本赋值给变量capture
:标记文本赋值给变量unless
:条件判断-除非case
:选择语句,case...when
语法raw
:临时停用标签处理
3. 表达式
描述 | 语法 |
---|---|
变量打印 | {{ page.my_var }} |
变量声明 | {% assign t_var = page.my_var %} |
管道符 | {{ post.url | relative_url }} |
包含模版 | {% include footer.html %} |
自定义变量文本 | {% capture readtime %} |
条件 | {% if user %} Hello {% else %} Nobody {% endif %} |
循环 | {% for item in array %} {{ item }} {% endfor %} |
运算符 | == 、!= 、> 、< 、>= 、<= 、and 、or |
条件与 | {% if remain==0 and remain!=1 %} |
条件或 | {% if remain==0 or remain==1 %} |
循环条件-从第2个,获取2个 | {% for item in array limit:2 offset:2 %} |
循环条件-除非最后一个 | {% unless forloop.last %},{% endunless %} |
循环条件-其它可用变量 | 循环长度forloop.length 、迭代索引forloop.index 、剩余迭代次数 forloop.rindex 、是否首次迭代forloop.first |
4. Liquid过滤器
- Liquid官方提供通用的过滤器,详见Liquid官方文档。
关键字 | 描述 | 语法和输出 |
---|---|---|
plus | 数字相加 | {{ 183.357 | plus: 12 }} |
minus | 数字相减 | {{ 183.357 | minus: 12 }} |
times | 数字相乘 | {{ 183.357 | times: 12 }} |
divided_by | 数字相除 | {{ 5 | divided_by: 3 }} 、{{ 5 | divided_by: 3.0 }} |
modulo | 数字取余 | {{ 183.357 | modulo: 12 }} |
downcase | 字符串小写 | {{ "Parker Moore" | downcase }} |
upcase | 字符串大写 | {{ "Parker Moore" | upcase }} |
prepend | 字符串前缀 | {{ 'bar' | prepend:'foo' }} |
append | 字符串追加 | {{ "/my/fancy/url" | append: ".html" }} |
remove | 删除关键字 | {{ "the train through the rain" | remove: "rain" }} |
remove_first | 删除第一个 | {{ "the train through the rain" | remove_first: "rain" }} |
truncate | 字符串截断至最大长度 | > {{ "Ground control to Major Tom." | truncate: 20 }} > Ground control to... |
split | 字符串拆分 | {% assign my_array = "ants,bugs,bees,bugs,ants" | split: "," %} |
join | 列表拼接 | {{ my_array | join: ", " }} |
uniq | 列表去重 | {{ my_array | uniq }} |
sort | 列表排序-区分大小写 | {{ my_array | sort }} |
sort_natural | 列表排序-不区分大小写 | {{ my_array | sort_natural }} |
first | 列表第一个 | {{ my_array.first }} |
last | 列表最后一个 | {{ my_array.last }} |
size | 计算字符/数组大小 | {{ "Major Tom." | size }} 、{{ my_array | size }} |
date | 时间格式化 | {{ "now" | date: "%Y-%m-%d %H:%M" }} |
strip_html | 删除HTML标签 | {{ "read <strong>Ulysses</strong>?" | strip_html }} |
strip_newlines | 删除换行符 | {{ string_with_newlines | strip_newlines }} |
newline_to_br | 替换换行符为br | {{ string_with_newlines | newline_to_br }} |
escape | URL编码 | {{ "Tetsuro&Takara" | escape }} |
escape_once | URL编码-不重复编码 | {{ "1 < 2 & 3" | escape_once }} |
5. Jekyll扩展过滤器
- 除了Liquid默认过滤器,Jekyll还提供一些易于使用的过滤器,详见Jekyll官方文档-过滤器。
关键字 | 描述 | 语法和输出 |
---|---|---|
relative_url | URL相对路径 | > {{ "/assets/style.css" | relative_url }} > /my-baseurl/assets/style.css |
absolute_url | URL绝对路径 | > {{ "/assets/style.css" | absolute_url }} > http://example.com/my-baseurl/assets/style.css |
date_to_rfc822 | 转化为RFC-822格式日期 | > {{ site.time | date_to_rfc822 }} > Mon, 07 Nov 2008 13:07:54 -0800 |
date_to_string | 转化为短格式日期 | > {{ site.time | date_to_string }} > 07 Nov 2008 |
xml_escape | 转义为XML格式文本 | {{ page.content | xml_escape }} |
uri_escape | 转义为URL格式文本-空格 | > {{ "http://foo.com/?q=foo, \bar?" | uri_escape }} > http://foo.com/?q=foo,%20%5Cbar? |
sample | 随机选取样本 | {{ site.pages | sample }} 、{{ site.pages | sample: 2 }} |
三、Jekyll变量
- 粗体部分为常用变量,其它变量详见:Jekyll官方文档-变量。
类别 | 名称 | 说明 |
---|---|---|
全局 | site | 站点信息和_config.yml 中变量 |
全局 | page | 页面特定信息和文件头中变量 |
全局 | layout | 布局特定信息和文件头中变量 |
全局 | content | 布局中被封装的具体页面内容 |
全局 | paginator | 分页器插件的相关变量 |
站点 | site.time | 当前时间 |
站点 | site.pages | 所有页面的列表 |
站点 | site.posts | 所有帖子的列表-时间倒序 |
站点 | site.data | _data文件夹中的数据信息,支持YAML/JSON/CSV/TSV |
站点 | site.categories | 帖子的所有类别 |
站点 | site.categories.CATEGORY | CATEGORY类别中的所有帖子 |
站点 | site.tags | 帖子的所有标签 |
站点 | site.tags.TAG | 含有TAG标签的所有帖子 |
站点 | site.CONFIG_KEY | _config.yml 中的所有变量 |
页面 | page.CONFIG_KEY | 页面文件头中的变量 |
页面 | page.content | 渲染后的页面内容 |
页面 | page.excerpt | 页面未渲染的摘要 |
页面 | page.url | 页面的URL,以/ 开头,不带域名 |
页面 | page.date | 分配给帖子的日期 |
页面 | page.id | 帖子的唯一标识符 |
页面 | page.name | 页面或帖子的文件名 |
页面 | page.next | 当前帖子的下一篇,基于site.posts 顺序 |
页面 | page.previous | 当前帖子的上一篇,基于site.posts 顺序 |
分页器 | paginator.page | 当前页码 |
分页器 | paginator.posts | 当前页面的帖子 |
分页器 | paginator.per_page | 每页帖子数 |
分页器 | paginator.total_pages | 帖子总页数 |
分页器 | paginator.total_posts | 帖子总数 |
分页器 | paginator.next_page | 下一页的页码 |
分页器 | paginator.next_page_path | 下一页的路径 |
分页器 | paginator.previous_page | 上一页的页码 |
分页器 | paginator.previous_page_path | 上一页的路径 |