Liquid学习笔记

Liquid中有2种Markups:

  • Output

    Hello {{ title }}

  • Tag 非文本 {\% 对称的大括号加百分号 \%}

输出Output

简单的输出如

Hello 

另外输出还可以使用过滤器 Filter,如:

Hello TOBI
Hello tobi has 4 letters!
Helo 2013 May

标准过滤器 Standard Filters

标准的Filter, 通过名字基本可以猜得出来,filter的用法类似Linux Pipeline,左边是右边的输入;对于Filter可以有输入参数。 例如plus,将左边数与右边数连接或相加, plus:1, 就代表左边数加1。

- date
- capitalize
- downcase
- upcase
- first
- last
- join
- sort
- map
- size
- escape
- escape_once
- strip_html
- strip_newlines
- newline_to_br
- replace
- replace_first
- remove
- remove_first
- truncate
- truncatewords
- prepend
- append
- minus
- plus
- times
- divided_by
- split
- modulo

Example:

{{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'
{{ 'barbar' | replace_first:'bar','foo' }} #=> 'foobar'
{{ 'foobarfoobar' | remove:'foo' }} #=> 'barbar'
{{ 'barbar' | remove_first:'bar' }} #=> 'bar'
{{ 'bar' | prepend:'foo' }} #=> 'foobar'
{{ 'foo' | append:'bar' }} #=> 'foobar'
{{ 4 | minus:2 }} #=> 2
{{ '1' | plus:'1' }} #=> '11', {{ 1 | plus:1 }} #=> 2
{{ 5 | times:4 }} #=> 20
{{ 10 | divided_by:2 }} #=> 5
{{ "a~b" | split:~ }} #=> ['a','b']
{{ 3 | modulo:2 }} #=> 1

标签 Tags

Tags是用来表达模板中的页面逻辑。 当前支持的tag包含了: - assign 变量赋值

{% assign var = value %}
  • capture Block tag that captures text into a variable (还没理解。。。)
  • case 类似switch
  • comment 注释
  • cycle 在一组备选值当中循环
  • for 循环
  • if if/else
  • include 包含另外的模板
  • raw 临时停止处理markup
  • unless 条件判断

Case

{% case condition %}
{% when 1 %}
hit 1
{% when 2 or 3 %}
hit 2 or 3
{% else %}
... else ...
{% endcase %}

Cycle

{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}

will result in

one
two
three
one

Comments

We made 1 million dollars {% comment %} in losses {% endcomment %} this year

Raw

\{% raw %\}
  In Handlebars, {{ this }} will be HTML-escaped, but {{{ that }}} will not.
\{% endraw %\}

If / else

{% if user %}
  Hello {{ user.name }}
{% endif %}

{% if user.name == 'tobi' %}
  Hello tobi
{% elsif user.name == 'bob' %}
  Hello bob
{% 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 %}

{% if user.name != 'tobi' %}
  Hello non-tobi
{% endif %}

# Same as above
{% unless user.name == 'tobi' %}
  Hello non-tobi
{% endunless %}

# Check if the user has a credit card
{% if user.creditcard != null %}
   poor sob
{% endif %}

# Same as above
{% if user.creditcard %}
   poor sob
{% endif %}

# Check for an empty array
{% if user.payments == empty %}
   you never paid !
{% endif %}

{% if user.age > 18 %}
   Login here
{% else %}
   Sorry, you are too young
{% endif %}

# array = 1,2,3
{% if array contains 2 %}
   array includes 2
{% endif %}

# string = 'hello world'
{% if string contains 'hello' %}
   string includes 'hello'
{% endif %}

For loops

{% for item in array %}
  {{ item }}
{% endfor %}

在for循环中还包含了很多辅助变量

-   forloop.length # => for的循环总次数
-   forloop.index  # => 当前循环的index,从1开始
-   forloop.index0 # => 当前循环的index,从0开始
-   forloop.rindex # => 当前循环剩余次数
-   forloop.rindex0 # => 当前循环剩余次数,从0开始
-   forloop.first   # => 是否是循环的第一次
-   forloop.last    #=> 是否是循环的最后一次

通过offset:int 控制循环的起始, limit: int控制循环的次数, 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 %}

Python Range重现~

# if item.quantity is 4...
{% for i in (1..item.quantity) %}
  {{ i }}
{% endfor %}
# results in 1,2,3,4

你可能感兴趣的:(学习笔记)