straight-shoota / crinja

Implementation of Jinja2 template language in Crystal
https://straight-shoota.github.io/crinja/
Other
122 stars 11 forks source link

Add support for namespace objects #65

Open aravindavk opened 1 year ago

aravindavk commented 1 year ago

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 %}