set

Inside code blocks you can also assign values to variables. Assignments use the set tag and can have multiple targets.

Here is how you can assign the bar value to the foo variable:

{% set foo = 'bar' %}

After the set call, the foo variable is avilable in the template like any other ones:

{{ foo }} {# bar #}

The assigned value can be any valid expression:

{% set foo = [1, 2] %}
{% set foo = { 'foo': 'bar' } %}
{% set foo = 'foo' ~ 'bar' %}

Serveral variables can be assigned in one block:

{% set foo, bar = 'foo', 'bar' %}

{# is equivalent to #}

{% set foo = 'foo' %}
{% set bar = 'bar' %}

Note that loops are scoped, therefore a variable declared inside a for loop is not accessible outside the loop itself:

{% for item in list %}
  {% set foo = item %}
{% endfor %}

{# foo is NOT available #}

If you want to access the variable, just declare it before the loop:

{% set foo = '' %}
{% for item in list %}
  {% set foo = item %}
{% endfor %}

{# foo is available #}