for

Itera sobre cada elemento en una secuencia o un mapeo. Por ejemplo, para mostrar una lista de usuarios proporcionada en una variable llamada users:

<h1>Miembros</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

Note

Una secuencia o un mapeo puede ser un array o un objeto que implemente la interfaz Traversable.

Si necesitas iterar sobre una secuencia de números, puedes usar el operador ..:

{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

El fragmento de código anterior imprimiría todos los números del 0 al 10.

También puede ser útil con letras:

{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}

El operador .. puede tomar cualquier expresión en ambos lados:

{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

Tip

Si necesitas un paso diferente de 1, puedes usar la función range en su lugar.

La variable loop

Dentro de un bloque de bucle for puedes acceder a algunas variables especiales:

Variable Descripción
loop.index La iteración actual del bucle. (indexado desde 1)
loop.index0 La iteración actual del bucle. (indexado desde 0)
loop.revindex El número de iteraciones desde el final del bucle (indexado desde 1)
loop.revindex0 El número de iteraciones desde el final del bucle (indexado desde 0)
loop.first Verdadero si es la primera iteración
loop.last Verdadero si es la última iteración
loop.length El número de elementos en la secuencia
loop.parent El contexto padre
{% for user in users %}
    {{ loop.index }} - {{ user.username }}
{% endfor %}

Note

Las variables loop.length, loop.revindex, loop.revindex0 y loop.last solo están disponibles para arrays PHP, u objetos que implementen la interfaz Countable.

La cláusula else

Si no se realizó ninguna iteración porque la secuencia estaba vacía, puedes renderizar un bloque de reemplazo usando else:

<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% else %}
        <li><em>no se encontraron usuarios</em></li>
    {% endfor %}
</ul>

Iterando sobre claves

Por defecto, un bucle itera sobre los valores de la secuencia. Puedes iterar sobre las claves usando el filtro keys:

<h1>Miembros</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

Iterando sobre claves y valores

También puedes acceder tanto a las claves como a los valores:

<h1>Miembros</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

Iterando sobre un subconjunto

Es posible que desees iterar sobre un subconjunto de valores. Esto se puede lograr usando el filtro slice:

<h1>Top Ten Miembros</h1>
<ul>
    {% for user in users|slice(0, 10) %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

Iterando sobre una cadena

Para iterar sobre los caracteres de una cadena, usa el filtro split:

<h1>Caracteres</h1>
<ul>
    {% for char in "諺 / ことわざ"|split('') -%}
        <li>{{ char }}</li>
    {%- endfor %}
</ul>