1``set``
2=======
3
4Inside code blocks you can also assign values to variables. Assignments use
5the ``set`` tag and can have multiple targets.
6
7Here is how you can assign the ``bar`` value to the ``foo`` variable:
8
9.. code-block:: jinja
10
11    {% set foo = 'bar' %}
12
13After the ``set`` call, the ``foo`` variable is available in the template like
14any other ones:
15
16.. code-block:: jinja
17
18    {# displays bar #}
19    {{ foo }}
20
21The assigned value can be any valid :ref:`Twig expression
22<twig-expressions>`:
23
24.. code-block:: jinja
25
26    {% set foo = [1, 2] %}
27    {% set foo = {'foo': 'bar'} %}
28    {% set foo = 'foo' ~ 'bar' %}
29
30Several variables can be assigned in one block:
31
32.. code-block:: jinja
33
34    {% set foo, bar = 'foo', 'bar' %}
35
36    {# is equivalent to #}
37
38    {% set foo = 'foo' %}
39    {% set bar = 'bar' %}
40
41The ``set`` tag can also be used to 'capture' chunks of text:
42
43.. code-block:: jinja
44
45    {% set foo %}
46        <div id="pagination">
47            ...
48        </div>
49    {% endset %}
50
51.. caution::
52
53    If you enable automatic output escaping, Twig will only consider the
54    content to be safe when capturing chunks of text.
55
56.. note::
57
58    Note that loops are scoped in Twig; therefore a variable declared inside a
59    ``for`` loop is not accessible outside the loop itself:
60
61    .. code-block:: jinja
62
63        {% for item in list %}
64            {% set foo = item %}
65        {% endfor %}
66
67        {# foo is NOT available #}
68
69    If you want to access the variable, just declare it before the loop:
70
71    .. code-block:: jinja
72
73        {% set foo = "" %}
74        {% for item in list %}
75            {% set foo = item %}
76        {% endfor %}
77
78        {# foo is available #}
79