crinja icon indicating copy to clipboard operation
crinja copied to clipboard

Add support for namespace objects

Open aravindavk opened this issue 1 year ago • 0 comments

Following code will not work because the loop variable scope.

{% set dte = "-" %}
{% for blog in blogs %}
    {% if (blog.created_at | date("%b %Y")) != dte %}
        <h2>{{ blog.created_at | date("%b %Y") }}</h2>
        {% set dte = blog.created_at | date("%b %Y") %}
    {% endif %}
    <p>{{ blog.title }}</p>
{% endfor %}

Jinja 2 provides namespace using that this use case will work (Ref: https://jinja.palletsprojects.com/en/3.0.x/templates/#assignments)

This feature was introduced in Jinja version 2.10

{% set ns = namespace(dte="-") %}
{% for blog in blogs %}
    {% if (blog.created_at | date("%b %Y")) != ns.dte %}
        <h2>{{ blog.created_at | date("%b %Y") }}</h2>
        {% set ns.dte = blog.created_at | date("%b %Y") %}
    {% endif %}
    <p>{{ blog.title }}</p>
{% endfor %}

aravindavk avatar Jul 10 '23 08:07 aravindavk