Liquid简明用法

2024-09-11
1.0.0
3736字, 约11分钟

本文主要介绍典型的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 %}
运算符 ==!=><>=<=andor
条件与 {% 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过滤器

关键字 描述 语法和输出
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 &lt; 2 &amp; 3" | escape_once }}

5. 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变量

类别 名称 说明
全局 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 上一页的路径

参考链接


上一篇: Jekyll简明用法

Comments

Contents