Liquid 常用语法记录
一、什么是 Liquid
Liquid 是一款专为特定需求而打造的模板引擎。
Liquid 中有两种类型的标记:Output 和 Tag。
- Output 通常用来显示文本
{{ 两个花括号 }} - Tag 通常用于执行逻辑命令
{% 花括号加百分号 %}
shopify filter:https://shopify.dev/docs/api/liquid/filters
Liquid for Designers:https://github.com/Shopify/liquid/wiki/Liquid-for-Designers
二、Output
简单示例
Hello {{name}}
Hello {{user.name}}
Hello {{ 'tobi' }}
如果想要改变输出的结果,我们可以使用过滤器,例如将输出的字符串转为大写
Hello {{ 'tobi' | upcase }}
还可以添加多个过滤器,例如
Hello {{ '*tobi*' | textilize | upcase }}
下面说一下常用的一些过滤器
1、计算(加、减、乘、除、取余、取整等)
- plus——加
{{ 1 | plus:1 }} #=> 2 - minus——减
{{ 4 | minus:2 }} #=> 2 - times——乘
{{ 5 | times:4 }} #=> 20 - divided_by——除
{{ 10 | divided_by:3 }} #=> 3 - modulo——取余
{{ 3 | modulo:2 }} #=> 1 - floor——向下取整
{{ 4.6 | floor }} #=> 4 - ceil——向上取整
{{ 4.6 | ceil }} #=> 5 - round——四舍五入
{{ 4.5612 | round: 2 }} #=> 4.56
2、字符串处理
- append——后拼接
{{ 'foo' | append:'bar' }} #=> 'foobar' - prepend——前拼接
{{ 'bar' | prepend:'foo' }} #=> 'foobar' - slice——字符串分割
{{ "hello" | slice: -3, 3 }} #=> llo split——-在匹配模式上分割字符串{{ "a~b" | split:"~" }} #=> ['a','b']remove——删除每个出现的情况{{ 'foobarfoobar' | remove:'foo' }} #=> 'barbar'replace——替换每个出现的地方{{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'truncate——将字符串截断为 x 个字符。它还接受第二个参数,该参数将附加到字符串{{ 'foobarfoobar' | truncate: 5, '.' }} #=> 'foob.'downcase——将输入字符串转换为小写upcase- 将输入字符串转换为大写strip_newlines- 从字符串中删除所有换行符 (\n)strip- 去除字符串两端的所有空格lstrip- 去除字符串开头的所有空格rstrip- 去除字符串末尾的所有空格
3、数组处理
first- 获取传入数组的第一个元素last- 获取传入数组的最后一个元素sort- 对数组的元素进行排序join- 将数组的元素与它们之间的特定字符连接起来reverse- 反转传入的数组uniq- 从数组中删除重复元素,可以选择使用给定属性来测试唯一性map- 映射/收集给定属性的数组
4、其他
- data——日期格式化
- default——设置默认值
{{ undefined_variable | default: "Default value" }} #=> "Default value" size- 返回数组或字符串的大小capitalize- 将输入句子中的单词大写escape_once- 返回 html 的转义版本,而不影响现有的转义实体escape- html 转义字符串newline_to_br- 用 html 中断替换每个换行符 (\n)remove_first- 删除第一次出现的情况,例如{{ 'barbar' | remove_first:'bar' }} #=> 'bar'replace_first- 替换第一个出现的地方,例如{{ 'barbar' | replace_first:'bar','foo' }} #=> 'foobar'strip_html- 从字符串中剥离 htmltruncatewords- 将字符串截断为 x 个单词url_encode- url 编码字符串
三、Tag
- assign - Assigns some value to a variable
- capture - Block tag that captures text into a variable
- case - Block tag, its the standard case...when block
- comment - Block tag, comments out the text in the block
- cycle - Cycle is usually used within a loop to alternate between values, like colors or DOM classes.
- for - For loop
- break - Exits a for loop
- continue Skips the remaining code in the current for loop and continues with the next loop
- if - Standard if/else block
- include - Includes another template; useful for partials
- raw - temporarily disable tag processing to avoid syntax conflicts.
- unless - Mirror of if statement
1、变量赋值
- assign - 将值赋给变量
{% assign name = 'freestyle' %} - capture - 用于捕获一段Liquid代码块的输出,并将其保存到一个变量中
{% capture variable_name %}
<!-- 这里是要捕获的内容,可以包含任意Liquid代码 -->
{{ some_variable | filter }}
{% if condition %}
Some content
{% endif %}
{% endcapture %}在上面的例子中,
capture标签将some_variable | filter和{% if condition %} Some content {% endif %}的输出捕获到名为variable_name的变量中。
2、if/else
liquid 用以下标签来实现 if 判断:
{% if <CONDITION> %} ... {% endif %}— 包含模板的一部分,仅当条件为真时才会运行。{% if user.name == 'tobi' or user.name == 'bob' %}
Hello tobi or bob
{% endif %}{% if user.name == 'bob' and user.age > 45 %}
Hello old bob
{% endif %}{% elsif <CONDITION> %}— 可以选择在块内使用if ... endif。指定另一个条件;如果最初的“if”失败,Liquid 会尝试“elsif”,如果成功则运行模板的以下部分。您可以在一个块中使用任意数量的 elsifif。{% if user.name == 'tobi' %}
Hello tobi
{% elsif user.name == 'bob' %}
Hello bob
{% endif %}{% else %}— 可以选择在if ... endif块内的任何“elsif”标签之后使用。如果上述所有条件均失败,Liquid 将运行“else”标签后面的模板部分。{% if user.age > 18 %}
Login here
{% else %}
Sorry, you are too young
{% endif %}{% unless <CONDITION> %} ... {% endunless %}——“if”语句的反面。不要将“elsif”或“else”与 except 语句一起使用。{% unless user.name == 'tobi' %}
Hello non-tobi
{% endunless %}
3、for 循环
{% for item in array %}
{{ item }}
{% endfor %}
{% for item in hash %}
{{ item[0] }}: {{ item[1] }}
{% endfor %}
# if item.quantity is 4...
{% for i in (1..item.quantity) %}
{{ i }}
{% endfor %}
# results in 1,2,3,4
- 辅助变量
在每个for循环期间,以下辅助变量可满足额外的样式需求:
forloop.length # => length of the entire for loop
forloop.index # => index of the current iteration
forloop.index0 # => index of the current iteration (zero based)
forloop.rindex # => how many items are still left?
forloop.rindex0 # => how many items are still left? (zero based)
forloop.first # => is this the first iteration?
forloop.last # => is this the last iteration?
- 可选参数
limit:<INTEGER>让您限制获得的物品数量。
offset:<INTEGER>让您从第 n 个项目开始收集。
reversed:从最后一个到第一个迭代集合。
# array = [1,2,3,4,5,6]
{% for item in array limit:2 offset:2 %}
{{ item }}
{% endfor %}
# results in 3,4
{% for item in collection reversed %} {{item}} {% endfor %}
# items => []
{% for item in items %}
{{ item.title }}
{% else %}
There are no items!
{% endfor %}
4、case 语句
{% case condition %}
{% when 1 %}
hit 1
{% when 2 or 3 %}
hit 2 or 3
{% else %}
... else ...
{% endcase %}
END--------------------------------------
Liquid 常用语法记录的更多相关文章
- SQL SERVER常用语法记录
用于记录SQL SERVER常用语法,以及内置函数. 以下语句包含: WITH 临时表语法 ROW_NUMBER()内置函数,我一般主要是用来分页.针对于查出来的所有数据做一个数字排序 分页的BETW ...
- MarkDown常用语法记录
目录 1. 斜体和粗体 2. 分级标题 3. 超链接 3.1 行内式(推荐) 3.2 行外式 3.3 自动链接 4. 锚点 5. 列表 5.1无序列表 5.2有序列表 6. 引用 7. 插入图像 8. ...
- SQL 常用语法记录
SQL语法 注意:SQL 对大小写不敏感 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). 数据操作语言 (DML) SQL (结构化查询语言)是用于执行查询的语 ...
- Markdown简介以及常用语法
Markdown简介以及常用语法 最近发现用markdown记录东西很方便,感觉和emacs的org mode很类似,但是windows下使用emacs不是很方便.特此记录一下markdown常用的语 ...
- Sql常用语法以及名词解释
Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...
- 2 hive的使用 + hive的常用语法
本博文的主要内容有: .hive的常用语法 .内部表 .外部表 .内部表,被drop掉,会发生什么? .外部表,被drop掉,会发生什么? .内部表和外部表的,保存的路径在哪? .用于创建一些临时表存 ...
- sql 常用语法汇总
Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控 ...
- Hbase常用操作记录
Hbase常用操作记录 Hbase 创建表 查看表结构 修改表结构 删除表 创建表 语法:create <table>, {NAME => <family>, VERSI ...
- JQuery插件之【jqGrid】常用语法整理
jqGrid常用语法整理,包含数据获取.常用函数.触发事件等 jqGrid表格数据获取相关语法 获取表格所有数据 $("#grid").jqGrid("getRowDat ...
- Oracle 左连接(+)加号用法及常用语法之间的关系
本文目的: 通过分析左连接(+)加号的写法和一些常用语法之间的联系,了解到Oracle 加号(+)的用法 分析步骤: 1.首先创建测试表的结构: create table test_left_a (a ...
随机推荐
- Oracle存储函数写法及调用
1.右键导航创建函数界面 2.返回值FunctionResult可自定义,当函数有输出函数时可不传数据,但需要设置返回(当提示未限定返回长度时,如代码示例设置255长度皆可): -------使用函数 ...
- VideoCapture
from xgoedu import XGOEDU import time #实例化edu XGO_edu = XGOEDU() XGO_edu.lcd_text(50,50,'hello',colo ...
- ActivityNotFoundException
activity 加入 AndroidManifest android.content.ActivityNotFoundException: Unable to find explicit acti ...
- Webpack DevServer 代理本地静态目录
前言 项目里需要离线切片地图,但切片地图文件很多,需求上有时无法单独提供一个独立的文件服务器或者切片服务器,放在 public 难免会在调试运行时被复制到 DevServer 上,而这个操作在低层级少 ...
- 算法修养--A*寻路算法
A*寻路算法 广度优先算法 广度优先算法搜索以广度做未优先级进行搜索. 从起点开始,首先遍历起点周围邻近的点,然后再遍历已经遍历过的点邻近的点,逐步的向外扩散,直到找到终点. 这种算法就像洪水(Flo ...
- 网络基础-OSI七层vsTCP/UDP四层 五层 数据封装
1.0 网络基础 1.1 网络是什么? 网络是信息传输.接收.共享的虚拟平台,通过它把各个点.面.体的信息联系到一起,从而实现这些资源的共享 网络分类:局域网 ,城域网,广域网 1.2 数据通信方式 ...
- Flask后端开发(一)-基础知识和前期准备
目录 1.背景介绍 1.1. 项目背景 1.2. 项目难点 1.3. 项目环境 2. flask后端开发实现的功能 3. flask部署和前后端对接 3.1. flask运行配置和服务器部署 3.2. ...
- 浅谈Python异步编程
1. 异步编程概述 异步编程是一种编程范式,用于处理那些需要等待I/O操作完成或者耗时任务的情况.在传统的同步编程中,代码会按照顺序逐行执行,直到遇到一个耗时操作,它会阻塞程序的执行直到操作完成.这种 ...
- 飞码LowCode前端技术系列(二):如何便捷配置出页面 | 京东云技术团队
一.配置解法 飞码LowCode前端技术(一)中飞码提出了至少需要满足2个大能力点以及对应16个细化点.在业务复杂的场景下数据具有流转性质,事件的触发会改变数据.同时也会触发其他事件等情况.飞码使用数 ...
- 自定义xunit测试用例的执行顺序
有的时候我们会对程序进行单元测试, 为了测试的效果以及后期的维护, 我一般会将各个测试拆开, 根据需要测试的类分到各个类型中, 不过在实际操作的时候就出现了一些意想不到的问题, 各个测试的执行是乱序的 ...