Jinja: 2.9 рдПрдХ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддрд┐рдЧрдорди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬрдире░ 2017  ┬╖  65рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/jinja

2.9:

>>> jinja2.Template('{% set a = -1 %}{% for x in range(5) %}[{{ a }}:{% set a = x %}{{ a }}] {% endfor %}{{ a }}').render()
u'[:0] [:1] [:2] [:3] [:4] -1'

2.8:

>>> jinja2.Template('{% set a = -1 %}{% for x in range(5) %}[{{ a }}:{% set a = x %}{{ a }}] {% endfor %}{{ a }}').render()
u'[-1:0] [0:1] [1:2] [2:3] [3:4] -1'

рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдИрдЖрд░рд╕реА рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛:

jinja2 рд╕реНрдХреЛрдкрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдореБрдЭреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╕рд╣реА рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдБ рд╡рд░реНрд╖ рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИ: https://github.com/kennethlove/alex-gaynor-blog-design/blob/551172/templates/archive.html#L13 -L24

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

changed_from_last рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛-рд╡рд╛рд░, рдирд╛рдо рд╣реА рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рдЖрдИрдПрдордУ рд╣реИред рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл changed рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╣рдореЗрд╢рд╛ "рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдЪрд╛рд╣реЗ рд╡рд╣ рдХреБрдЫ рднреА рд╣реЛ? рдЕрдЧрд░ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдареАрдХ рдирд╣реАрдВ рд╣реИ рддреЛ рд╡реЗ рд╣рдореЗрд╢рд╛ not loop.first рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рднреА 65 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрдмрдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рд╣реИ, рдкреБрд░рд╛рдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИред {% set %} рдЯреИрдЧ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрднреА рднреА рдмрд╛рд╣рд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдРрд╕рд╛ рд╣реБрдЖред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореИрдВ рдорд╛рдиреВрдВрдЧрд╛ рд╡рд╣ рд╕рд╣реА рдерд╛ [-1:0] [-1:1] [-1:2] [-1:3] [-1:4] -1 рдЬреИрд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред

рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ groupby рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ - рдПрдХ рд▓реВрдк рдореЗрдВ {% set found = true %} рдЬреИрд╕реЗ рд╕рд╛рдорд╛рди рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрдм рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ ...

рдореИрдВ рд╣реИрд░рд╛рди рд╣реВрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдХреНрдпрд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛?

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рд╣рд╛рдБ:

>>> import jinja2
>>> jinja2.__version__
'2.0'
>>> jinja2.Template('{% for x in range(5) %}[{{ a }}:{% set a = x %}{{ a }}] {% endfor %}{{ a }}').render()
u'[:0] [0:1] [1:2] [2:3] [3:4] '

рдорд╣рд╛рдиред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдХрд┐рд╕ рдЪрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдмреАрдЪ рдореЗрдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рд╣реИред рдЙрджрд╛рд╣рд░рдг: рдореИрдХреНрд░реЛ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдм рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реВрдВред

рд╣рдореНрдо рд╢рд╛рдпрдж рдкрд╛рдЗрдерди рдХреЗ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди nonlocal рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)? рдпрд╛рдиреА рдмрд╛рд╣рд░реА рджрд╛рдпрд░реЗ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВ (рдпрд╛рдиреА рдпрджрд┐ рдмреАрдЪ рдореЗрдВ рдХреЛрдИ рдореИрдХреНрд░реЛ рд╣реИ) рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ?

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрднрд┐рдХрдерди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:

>>> Template('{% set x = 0 %}{% for y in [1, 2, 3] recursive %}{{ x }}{% set x = y %}{% endfor %}').render()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
jinja2.exceptions.TemplateAssertionError: It's not possible to set and access variables derived from an outer scope! (affects: x (line 1)

рд╡реНрдпрд╡рд╣рд╛рд░ рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЗ рд╕рд╛рде/рдмрд┐рдирд╛ рдЕрд▓рдЧ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (2.8.1 рдореБрдЭреЗ рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЗ рд╕рд╛рде рдЕрдирдмрд╛рдЙрдВрдбрд▓реЛрдХрд▓ рдПрд░рд░ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд┐рдирд╛ '012')

рдЕрдирдмрд╛рдЙрдВрдб рд╕реНрдерд╛рдиреАрдп рддреНрд░реБрдЯрд┐ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдерд╛ред

рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдВ рдЗрд╕реЗ "рдЗрдЪреНрдЫрд┐рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдФрд░ рдХреЛрдИ рдирддреАрдЬрд╛ рдирд┐рдХрд▓рддрд╛ рд╣реИ рддреЛ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднреЗрдЬрд╛ рдЧрдпрд╛ (#656 рджреЗрдЦреЗрдВ) рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ v.2.8.1 рд╕реЗ v2.9.4 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдкрд░ рдЙрдбрд╝рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЯреБрдХрдбрд╝реЗ рдмрджрд▓ рд░рд╣реЗ рдереЗ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛ (рджреЗрдЦреЗрдВ https://github.com/MinchinWeb/seafoam/commit/8eb760816a06e4f0382816f82586204d1e7734fd рдФрд░ https://github.com/MinchinWeb/seafoam/commit/89d555dbd6a2f256471d2694e4184f2) рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдиреНрдпрдерд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ред рдирдП рдХреЛрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддреБрд▓рдирд╛ рдЕрдм рдСрдирд▓рд╛рдЗрди рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдкреБрд░рд╛рдирд╛ рдХреЛрдб (v.2.8.1):

{%- set last_day = None -%}

{% for article in dates %}
    {# ... #}
    <div class="archives-date">
        {%- if last_day != article.date.day %}
            {{ article.date | strftime('%a %-d') }}
        {% else -%}
            &mdash;
        {%- endif -%}
    </div>
    {%- set last_day = article.date.day %}
{% endfor %}

рдФрд░ рдирдпрд╛ рдХреЛрдб, рдЗрди-рд▓рд╛рдЗрди рддреБрд▓рдирд╛рдУрдВ рдХреЗ рд╕рд╛рде (v2.9.4):

{% for article in dates %}
    {# ... #}
    <div class="archives-date">
        {%- if ((article.date.day == dates[loop.index0 - 1].date.day) and
                (article.date.month == dates[loop.index0 - 1].date.month) and 
                (article.date.year == dates[loop.index0 - 1].date.year)) %}
                    &mdash;
        {% else -%}
                    {{ article.date | strftime('%a %-d') }}
        {%- endif -%}
    </div>
{% endfor %}

рддреЛ рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ "рд╕реБрд╡рд┐рдзрд╛" (рдпрд╛ "рд╣реИрдХ", рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдореБрджреНрджреЗ рдЗрд╕ рд╕рдордп рд╕рдордЭрджрд╛рд░реА рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдХреБрдЫ (рдХрдо рд╕реЗ рдХрдо) рдЪреЗрдВрдЬрд▓реЙрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХрдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдирдЬрд╛рди рдХрд╛рдЯ рд╕рдХреЗ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: -/рдХрд╖реНрдЯрдкреНрд░рдж рд░реВрдк рд╕реЗ рдЗрд╕ рдХрд╛рдо рдХреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рд╛рдпрдж рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ( loop.changed_from_last ):

{% for article in dates %}
    <div class="archives-date">
        {%- if loop.changed_from_last(article.date.day) %}
            {{ article.date | strftime('%a %-d') }}
        {% else -%}
            &mdash;
        {%- endif -%}
    </div>
{% endfor %}

changed_from_last рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛-рд╡рд╛рд░, рдирд╛рдо рд╣реА рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рдЖрдИрдПрдордУ рд╣реИред рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл changed рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд╣рдореЗрд╢рд╛ "рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдЪрд╛рд╣реЗ рд╡рд╣ рдХреБрдЫ рднреА рд╣реЛ? рдЕрдЧрд░ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдареАрдХ рдирд╣реАрдВ рд╣реИ рддреЛ рд╡реЗ рд╣рдореЗрд╢рд╛ not loop.first рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ previous_context рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рдкреВрд░реЗ рд╕рдВрджрд░реНрдн рдХреЛ рд░рдЦрддрд╛ рд╣реИред

рдмрд╕ previous рдпрд╛ prev ? "рд╕рдВрджрд░реНрдн" рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ (рдХреЛрдИ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ)

..... рдФрд░ рдЕрдм рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ next рдорд╛рдВрдЧ рд░рд╣рд╛ рд╣реИ:/

рдпрд╛ рд╢рд╛рдпрдж рдмрд╛рд╣рд░реА рджрд╛рдпрд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдмрдпрд╛рди: set_outer рдпрд╛ рдХреБрдЫ рдФрд░ред

рдореИрдВ рдпрд╣ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛:

class LoopContextBase(object):

    def __init__(self, recurse=None, depth0=0):
        ...
        self._last_iteration = missing

    def changed(self, *value):
        if self._last_iteration != value:
            self._last_iteration = value
            return True
        return False

@davidism рд╣рдо рдкреВрд░реЗ рд╕реНрдХреЛрдкрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ set_outer рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреВрд░реА рдмрд╛рдд рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛ред

рд╣рд╛рдБ, рд▓рдЧрд╛ рдХрд┐ рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ "рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкрд┐рдЫрд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ", рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ changed рд╡рд┐рдзрд┐ рднреА рдкрд╕рдВрдж рд╣реИред

рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреИрд░реЛрдВ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕реВрдЪреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рднреА рдирд╣реАрдВ рд╣реИ ред рдореИрдВ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВ loop.first рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ (рдЬрд┐рддрдирд╛ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ) рдпрд╛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдмреБрд░реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ (рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдПрдХ рдмрдЧ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛)ред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреБрд▓рд┐рд╕ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЬрд┐рдВрдЬрд╛ 2.9+ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪрд╛рдирдХ рдЯреВрдЯрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЕрдм рдирд╡реАрдирддрдо 2.8 рд╕рдВрд╕реНрдХрд░рдг рдкрд┐рди рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдмрдиреЗ рд░рд╣реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реА рд╕рдВрд╕реНрдХрд░рдг рдпреЛрдЬрдирд╛ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ), рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рддрд╛ред

рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдЬрд┐рдиреНрдЬрд╛ 2 рд╕реНрдХреЛрдк рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреИрд╕реЗ рдХрд┐ рдЕрдЬрдЧрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдпрд╛рдиреА, jinja2 рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдореИрдХреНрд░реЛрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ (рдФрд░ рдЙрдирдХрд╛ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рд╣реЛрддрд╛ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рд▓реВрдк рдХрд╛ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рднреАред рдЬрдмрдХрд┐ @mitsuhiko рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ jinja 2.8 рдФрд░ рдиреАрдЪреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдмрдЧ рдереЗ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдерд╛ рдХрд┐ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ (рдЬрд┐рдВрдЬрд╛ 2.8) рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╡рд╣реА https://github.com/pallets/jinja/issues/660 рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдкрд╛рдЗрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХреЛрдВ рдХрд╛ рдкрд╛рдЗрдерди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдкрддрд╛ рд╣реИ рдЗрд╕рдХреЗ)ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рдВрдЬрд╛ рдореЗрдВ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЕрдиреБрдорд╛рди рди рд▓рдЧрд╛рдирд╛ рдкрдбрд╝реЗред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреГрдкрдпрд╛ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рди рд▓реЗрдВ, рдореИрдВ рдЬрд┐рдиреНрдЬрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд╣реВрдВред

@roganov рдЗрд╕ рдкрд░ рдХреБрдЫ рдиреЛрдЯреНрд╕:

рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдЬрд┐рдиреНрдЬрд╛ 2 рд╕реНрдХреЛрдк рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреИрд╕реЗ рдХрд┐ рдЕрдЬрдЧрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдЗрдерди рдХрд╛ рджрд╛рдпрд░рд╛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЧрд▓рддреА рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдмрдХрд┐ @mitsuhiko рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ jinja 2.8 рдФрд░ рдиреАрдЪреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдмрдЧ рдереЗ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдерд╛ рдХрд┐ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдЕрдкрд╡рд╛рдж рдерд╛ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реАрдорд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдЬрд┐рдВрдЬрд╛ рдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдирд┐рдпрдо рдереЗ рдФрд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрднреА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рдВрдЬрд╛ рдореЗрдВ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЕрдиреБрдорд╛рди рди рд▓рдЧрд╛рдирд╛ рдкрдбрд╝реЗред

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рдЪрд░ рдХреЛ рд▓реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдерд╛? рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ (рдкрд╛рда рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗ рдЙрдзрд╛рд░ рд▓реЗрдирд╛):

{%- set last_day = None -%}

{% for article in dates | pass_variable ( last_day ) %}
    {# ... #}
    <div class="archives-date">
        {%- if last_day != article.date.day -%}
            {{ article.date | strftime('%a %-d') }}
        {%- else %}
            &mdash;
        {% endif -%}
    </div>
    {%- set last_day = article.date.day %}
{% endfor %}

рдпрд╛ scoped рд╕рдорд╛рди рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ?


рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд▓реВрдк рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрд▓ рдХрд┐рддрдиреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ? рдХрд┐рддрдиреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреБрдЫ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИрдВ? рдЪрдпрдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ (рдХреБрд▓ рдкрдВрдХреНрддрд┐ рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)?

рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╣рд╛рдБ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреБрдирд░рд╛рд╡рд░реНрддрдиреАрдп рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИрдВред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ рд╡рд╣ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

{% for article in dates with last_day %}

рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ with рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд┐рдВрдЬрд╛ рдореЗрдВ рд╕рд╛рдорд╛рди рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП {% with %} рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдУрдЯреАрдУрдПрдЪ, рдпрд╣рд╛рдВ рдпрд╣ рд╡рд┐рдкрд░реАрдд рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЙрдХ рдПрдХ рдирдпрд╛ рджрд╛рдпрд░рд╛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдмрд╛рд╣рд░реА рджрд╛рдпрд░реЗ рдХреЛ рд╕реБрд▓рдн рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ ..

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЬрд┐рдиреНрдЬрд╛ рдХреЛ рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдХреЛрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕реНрдХреЛрдкрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рдЖрдк рд╡рд░реНрддрдорд╛рди рд╕рдВрдХрд▓рди рдпрд╛ рдЖрдИрдбреА рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЙрд╕ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд▓реВрдк рд╣реИ рдЬреЛ recursive ред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдореИрдХреНрд░реЛ рдХреЛ рд▓реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдмреНрд▓реЙрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ:

{% set foo = namespace() %}
{% set foo.iterated = false %}
{% for item in seq %}
  {% set foo.iterated = true %}
{% endfor %}

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП set рдЯреИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@mitsuhiko рдФрд░ рдЙрд╕ рддрд░рд╣ рдХрд╛ рдкреИрдЯрд░реНрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА do рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╣реИ: http://stackoverflow.com/a/4880398/400617

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, do рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдмреЗрд╣рдж рднрдпрд╛рдирдХ рд╣реИред рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд▓реЛрдЧ рдкрд╛рдпрдерди 2 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ nonlocal ...

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдмрд╕ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдПрд▓реЗрдХреНрд╕ рдиреЗ рдмрддрд╛рдпрд╛, рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдпрд╛ рдХреБрдЫ рддрд░реНрдХ рдХреЛ рдкрд╛рдпрдерди рдореЗрдВ рдбрд╛рд▓рдХрд░ред

рдПрдХ рдФрд░ (рдмрджрд╕реВрд░рдд) рд╣реИрдХ рдПрдХ рд╕реВрдЪреА, рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдкреЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: http://stackoverflow.com/a/32700975/4276230

рдирдорд╕реНрддреЗ, рдореИрдВ рд▓рдЧрднрдЧ 2 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдм рдпрд╣ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирдП рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдФрд░ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВред

{% set list = "" %}
{% for name in names %}
{% if name.last is defined %}
{% set list = list + name.last + " " %}
{% if loop.last %}
{{ list.split(' ')|unique }}
{% endfor %}

@ рдкреВрдЬрди14

{{ names|map(attribute="last")|select|unique }}

рдпрджреНрдпрдкрд┐ unique рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рдЪреАрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА unique рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред

рдирдорд╕реНрддреЗ,
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рд╕рд╛рд░реЗ "рдмрджрд╕реВрд░рдд" рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рдВрдЬрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг/рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП? рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рднреА рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред

рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

{% for state in states.sensor -%}
{% if loop.first %}
{% set devnum = 0 %}
{% endif -%}
{%- if state.state == "online" %}
{% set devnum = devnum + 1 %}
{%- endif -%}
{% if loop.last %}
{{ devnum }}
{% endif -%}
{%- endfor -%}

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рдВрдЬрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг/рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП?

рдЖрдкрдХреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ (рдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛)ред рддреЛ рдЬрд╡рд╛рдм рд╣реИ рдРрд╕рд╛ рдордд рдХрд░реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

рдЬрд┐рдВрдЬрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реВрдк рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред {{ loop.index0 }}

@davidism рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ

рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд┐рдЦреЗрдВ рдЬреЛ devnum, sensor рдЯреБрдкрд▓реНрд╕ рдХреЛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╛ рдЗрд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред рдпрд╛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рд╣рд░ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред

@ рдореЛрд▓реЛрдбреИрдХреНрд╕ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

{{ states.sensor|selectattr('state', 'equalto', 'online')|sum }}

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм |count ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рд╣рд╛рдБ, рдЧрд┐рдиреЗрдВред

@ рдорд┐рддреНрд╕реБрд╣рд┐рдХреЛ , рдЖрдкрдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╢рд╛рдпрдж, jinja2 (рдлрд╝рд┐рд▓реНрдЯрд░) рдХреЛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ ( рд╣реЛрдо рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рджрдпрд╛ред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВред рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдорд╛рдВрдЧ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ 2.8 рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдореЗрд░рд╛ рд╣реИ:

{% set count = 0 %}
{% if 'anchors' in group_names %}
nameserver 127.0.0.1
{% set count = count+1 %}
{% endif %}
{% for resolver in resolvers %}
{% if count < 3 %}
{% if resolver|ipv6 and ansible_default_ipv6.address is defined %}
nameserver {{ resolver }}
{% set count = count+1 %}
{% elif resolver|ipv4 and ansible_default_ipv4.address is defined %}
nameserver {{ resolver }}
{% set count = count+1 %}
{% endif %}
{% endif %}
{% endfor %}

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ "рдЧрд┐рдирддреА" рдЪрд░ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рдХрд░реВрдБрдЧрд╛ рдЬрд┐рд╕реЗ рдореИрдВ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реВрдкреЛрдВ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рдЬреЛ рдЗрд╕реЗ 2.8 рдФрд░ 2.9 рджреЛрдиреЛрдВ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛?

@davidism рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ 2 рд╕реВрдЪрд┐рдпрд╛рдВ рдмрдирд╛рдПрдВ

{% set list1 = name|default()|map(attribute="last")|select|list %}
{% set list2 = name|default()|map(attribute="age")|select|list %}

рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА 3 рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░реЗрдВ, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕реВрдЪреА 3 рдкрд░ рдЕрджреНрд╡рд┐рддреАрдп (рдЙрддреНрддрд░рджрд╛рдпреА рдлрд╝рд┐рд▓реНрдЯрд░) рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдВрддрд┐рдо 1-рдЖрдпреБ1
last2-age2
рдЕрдВрддрд┐рдо3-рдЖрдпреБ3
рдЕрдВрддрд┐рдо4-рдЖрдпреБ4
рдЕрдВрддрд┐рдо5-рдЖрдпреБ5
рдЕрдВрддрд┐рдо6-рдЖрдпреБ6

рдореИрдВрдиреЗ рдЬреЛ рдирдХреНрд╢рд╛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ #554
рдореИрдВ ansible рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ jinja2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЬрдЧрд░ рдореЗрдВ рдХреБрдЫ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

@ pujan14 @aabdnn @Molodax рдХреНрдпрд╛ рдпрд╣ рдкреИрдЯрд░реНрди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Ansible рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдЖрдпрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВ рдпрд╛ рдХрд╣реАрдВ рдФрд░ рдкрд╛рдП рдЧрдП рд╣реИрдВ? рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, Ansible рдХреЛ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВред

@davidism рдореИрдВрдиреЗ рдКрдкрд░ рдЬреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдХрд┐рд╕реА рднреА рдЙрддреНрддрд░рджрд╛рдпреА рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред Ansible рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Jinja2 рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА Jinja2 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдкрдврд╝рдХрд░ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ Jinja2 рдиреЗ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЧреНрд▓реЛрдмрд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдерд╛ред рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдБ рдХрд┐ Ansible рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрдХреА рдФрд░ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@ рдбреЗрд╡рд┐рдбрд┐рдЬреНрдо рдореИрдВрдиреЗ рдирдП рдЬрд┐рдВрдЬрд╛ 2.9 рдореЗрдВ рд▓реВрдк рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ ред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

{% for name in names %}
{% if loop.first %}
{% set list = "" %}
{% endif %}
{% if name.first is defined and name.last is defined and not name.disabled %}
{% set list = list + name.first|string + "-" + name.last|string %}
{% if loop.last %}
{% for item in list.split(' ')|unique %}
{{ item }}
{% endfor %}
{% else %}
{% set list = list + " " %}{% endif %}
{% endif %}
{% endfor %}

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореЗрд░реА рд╕рдордЭ рд╕реЗ рдореИрдВ рдХреЛрдИ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдирд┐рдпрдо рдирд╣реАрдВ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред

2.8 рдФрд░ рдмреЗрд╣рддрд░ рдореЗрдВ рдпрд╣ рдореБрджреНрджрд╛ рдерд╛

рдпрд╣рд╛рдБ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:

import unittest
from jinja2 import Template

TEMPLATE1 = """{% set a = 1 %}{% for i in items %}{{a}},{% set a = a + 1 %}{% endfor %}"""

class TestTemplate(unittest.TestCase):

  def test_increment(self):
    items = xrange(1,10)
    expected='%s,' % ','.join([str(i) for i in items])
    t = Template(TEMPLATE1)
    result = t.render(items=items)
    self.assertEqual(expected,result)

unittest.main()

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп loop.index рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ loop рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд┐рдЫрд▓реЗ рд▓реВрдк рд╡реИрд▓реНрдпреВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рд╡рд╕реНрддреБ рд╡рд░реНрддрдорд╛рди рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдЧреНрд░реБрдкрдмреА рднреА рд╡рд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡рд╕реНрддреБ/рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд╣реБрдВрдЪ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ :

{% set previous_date = none %}
{% for item in entries -%}
    {% set date = item.start_dt.astimezone(tz_object).date() %}
    {% if previous_date and previous_date != date -%}
        ...
    {% endif %}
    {% set previous_date = date %}
{%- endfor %}

рд╣рд╛рдБ рдпрд╣ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рд▓реВрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ set(key, value) рдФрд░ get(key) рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдлрд┐рд░ рд▓реЛрдЧ рд▓реВрдк рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреЛрдИ рднреА рдЧреИрд░-рдмрджрд╕реВрд░рдд рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдФрд░ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдХреЛ setdefault , pop рдФрд░ рдЕрдиреНрдп рддрд╛рдирд╛рд╢рд╛рд╣реА рдЬреИрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рдерд╛ред

@davidism @ThiefMaster рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдЯреЛрд░реЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдЗрд╕ рдХрджрд░:

{% set ns = namespace() %}
{% set ns.value = 42 %}
...{% set ns.value = 23 %}

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдЗрд╕ рд╕рдордп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдХреЛрдИ рдкреБрди: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдкрд╛рдЗ 2 рдХреЗ рд▓рд┐рдП nonlocal рдЬреИрд╕рд╛ рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ loop.ns , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕реЗ рдЬреЛ рдирд╛рдкрд╕рдВрдж рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ {% set obj.attr = 42 %} рд╕рд╛рде obj рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рд▓реБрднрд╛рд╡рдирд╛ рд▓рдЧреЗрдЧрд╛ рдЬреЛ namespace() - рдРрд╕рд╛ рдХреБрдЫ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП .

рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ previtem / nextitem / changed() рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ "рд╢реЛрд░" рдХреЗ рдмрд┐рдирд╛ "рд╕рд░рд▓" рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВред

@ThiefMaster рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕ рдХрд╛рдо рдХреЛ рджреЗрдЦреВрдВрдЧрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдирд╛рдорд╕реНрдерд╛рди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдХреЛрдИ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрднреА рднреА рдЙрди рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛рд╡рдзрд╛рди рд╣реИрдВ рдЬреЛ рд▓реЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ...

{% macro do_stuff(ns) %}
    {% set ns.foo %}bar{% endset %}
    {% set ns.bar %}foobar{% endset %}
{% endmacro %}

{% set ns = namespace() %}
{{ do_stuff(ns) }}

рдЕрд╕рд▓ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ {% namespace ns %} рдЬреИрд╕рд╛ рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реЗ рдПрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ - namespace рдирд╛рдордХ рдПрдХ рдЪрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬрдмрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЙрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ (рдЬреИрд╕реЗ рдкрд╛рдЗрдерди рдореЗрдВ рдПрдХ рдмрд┐рд▓реНрдЯрд┐рди рдХреЛ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдХрд░рдирд╛) рдпрд╣ рдереЛрдбрд╝рд╛ рдЧрдВрджрд╛ рд▓рдЧрддрд╛ рд╣реИ ...

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рдХреНрдпрд╛ рд╣рдореЗрдВ 2.9.6 рдореЗрдВ рдкреНрд░реАрд╡рд┐рдЯрдо/рдиреЗрдХреНрд╕реНрдЯрд┐рдЯрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА?
рдореЗрд░реЗ рдХреБрдЫ рд╕рд╛рд▓реНрдЯрд╕реНрдЯреИрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдм рдЯреВрдЯ рдЧрдП рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╣ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рдЬреЛ рдЖрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд╣рд╛рдБ, рдпрджрд┐ рдЖрдк 2.9.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рдХрднреА рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдерд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖред

рд╣рдо рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓реМрдЯреЗрдВрдЧреЗред рдЬрдмрдХрд┐ рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрд╕реЗ рдХрднреА рднреА рд╕рдорд░реНрдерд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрдмрдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ, рдпрд╣ рдПрдХ рдлреАрдЪрд░ рд░рд┐рд▓реАрдЬ (рджреВрд╕рд░рд╛ рдирдВрдмрд░ рдкрд░рд┐рд╡рд░реНрддрди) рдореЗрдВ рд╣реБрдЖ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╣рдордиреЗ рд╣рдореЗрд╢рд╛ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рддрдм рддрдХ рдкрд┐рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдЬрд╛рд░реА рди рд╣реЛ рдЬрд╛рдПред

рдЗрд╕реЗ рд▓реЙрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣рд╛ рдЬрд╛рдирд╛ рд╣реИ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд╣ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд┐рди рд╕реБрдзрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП #676 рдФрд░ #684 рджреЗрдЦреЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

navilan picture navilan  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nalzok picture nalzok  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mtrstudio picture mtrstudio  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

The-Compiler picture The-Compiler  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mitsuhiko picture mitsuhiko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ