For

v1.9.1

重复执行代码块的迭代标签。

基本使用

for…in

重复执行一段代码。

输入

{% for product in collection.products %}
  {{ product.title }}
{% endfor %}

输出

hat shirt pants

else

指定 for 循环的集合长度为零时执行的代码块。

输入

{% for product in collection.products %}
  {{ product.title }}
{% else %}
  The collection is empty.
{% endfor %}

输出

The collection is empty.

break

遇到 break 标签时 for 循环停止执行。

输入

{% for i in (1..5) %}
  {%- if i == 4 -%}
    {% break %}
  {%- else -%}
    {{ i }}
  {%- endif -%}
{% endfor %}

输出

123

continue

遇到 continue 标签时跳过当前这次迭代。

输入

{% for i in (1..5) %}
  {%- if i == 4 -%}
    {%- continue -%}
  {%- else -%}
    {{ i }}
  {%- endif -%}
{% endfor %}

输出

1235

forloop

for 循环里有一个 forloop 变量可用,用来表示迭代的当前状态。

forloop.first, forloop.lastforloop.length 属性:

输入

{% for i in (1..5) %}
  {%- if forloop.first == true -%} First
  {%- elsif forloop.last == true -%} Last
  {%- else -%} {{ forloop.length }}
  {%- endif %}
{% endfor -%}

输出

First
5
5
5
Last

forloop.index, forloop.index0, forloop.rindexforloop.rindex0 属性:

输入

index index0 rindex rindex0
{% for i in (1..5) %}
  {{- forloop.index }}     {{ forloop.index0 }}      {{ forloop.rindex }}      {{ forloop.rindex0 }}
{% endfor -%}

输出

index index0 rindex rindex0
1     0      5      4
2     1      4      3
3     2      3      2
4     3      2      1
5     4      1      0

参数

limit

限制循环执行的次数。

输入

<!-- if array = [1,2,3,4,5,6] -->
{% for item in array limit:2 %}
  {{- item -}}
{% endfor %}

输出

12

offset

从指定的下标处开始循环。

输入

<!-- for array = [1,2,3,4,5,6] -->
{% for item in array offset:2 %}
  {{- item -}}
{% endfor %}

输出

3456

offset:continue

v9.33.0

offset 的值可以是 continue,用来继续上一次循环。例如:

输入

<!-- for array = [1,2,3,4,5,6] -->
{% for item in array limit:2 %}
  {{- item -}}
{% endfor%}
{% for item in array offset:continue %}
  {{- item -}}
{% endfor%}

输出

12
3456

对同样的变量名和集合名(这个例子中是 "item-array"),存在唯一的位置记录。也就是说用新的变量名就可以开启一个新的循环:

输入

<!-- for array = [1,2,3,4,5,6] -->
{% for item in array limit:2 %}
  {{- item -}}
{% endfor%}
{% for item2 in array offset:continue %}
  {{- item2 -}}
{% endfor%}

输出

12
123456

range

定义一个用于循环的数字范围。可以用字面量定义范围,也可以用变量定义范围。

输入

{% for i in (3..5) %}
  {{ i }}
{% endfor %}

{% assign num = 4 %}
{% for i in (1..num) %}
  {{ i }}
{% endfor %}

输出

3 4 5
1 2 3 4

reversed

反转循环的顺序。注意这个参数的拼写和过滤器 reverse 不同。

输入

<!-- if array = [1,2,3,4,5,6] -->
{% for item in array reversed %}
  {{ item }}
{% endfor %}

输出

6 5 4 3 2 1