Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add variables index, index1, is_first and is_last to object loops #52

Closed
wants to merge 1 commit into from
Closed

Add variables index, index1, is_first and is_last to object loops #52

wants to merge 1 commit into from

Conversation

craigpepper
Copy link
Contributor

The special variables index, index1, is_first and is_last are available in loops over arrays. Add these variables so they available in loops over objects

The special variables `index`, `index1`, `is_first` and `is_last` are available in loops over arrays.  Add these variables so they available in loops over objects
data_loop[element_loop->value] = item.second;
result.append( render(Template(*element_loop), data_loop) );
/* For nested loops, use parent/index */
if (data_loop.count("index") == 1 && data_loop.count("index1") == 1) {
Copy link

@flexferrum flexferrum May 21, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does not to follow the jinja2 specs and not to put all these variables inside the 'loop' composite variable? In this case user can refer this vars as loop.index, loop.index1 etc. and can avoid situations like this:
{% for index in indexes %} {{ index }} {% endfor %}
Which 'index' should be used here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. I'm not familiar with jinja2 - I just followed the existing construct that inja uses for loops over arrays. However, your suggestion should be relatively straightforward to implement.

That said, I don't know how closely inja in intended to follow jinja2 specs - the inja readme says 'loosely inspired'. I would defer to the opinion of @pantor in this case.

Copy link

@flexferrum flexferrum May 21, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. I see. So waiting for @pantor decision. But here is one more reason to use 'loop' variable instead of several different vars. In case of 'loop' var you can simplify this piece of code in the following way:

if (data.count("loop") == 1)
{
    data_loop["loop"]["parent"] = data["loop"];
}
data_loop["loop"]["index"] = ...;
// ...

And as a consequence you can access any outer loop context as {{ loop.parent.parent.index }}.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, I think we should follow the jinja2 spec in this (and in general more) cases. I'll update the master branch to use the loop variable, and then feel free to update this PR, @craigpepper. Thanks so much!

@pantor pantor closed this Dec 14, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants