Scott Kaplan
Scott Kaplan

Reputation: 1

NUNJUKS: For loop to create list of variables, but instead creates strings

I'm using nunjucks to create a JSON export file. I have a list of variables that have the same name except for an incrementing number on the end. I'm using a for loop in the following way:

{% for i in range(1, 6) -%}
{% set items =  ["{{ answer",i, " }}"] %}
    "Solution{{ i }}" : "{{ items | join }}",
{%- endfor %} 

I want answer1 to grab the variable answer1, but instead it is giving me a string "{{ anwser1 }}" .

Any idea how to use the for loop to point to each variable (answer1, answer2, answer3, etc)?

Upvotes: 0

Views: 363

Answers (1)

Aikon Mogwai
Aikon Mogwai

Reputation: 5225

You can add some global function or filter to get access to a context (vars scope) by name.

const nunjucks = require('nunjucks');
const env = new nunjucks.Environment();

env.addGlobal('getContext', function (prop) {
  return prop ? this.ctx[prop] : this.ctx;
});

const tpl = `{% for i in range(1, 4)%} {{ getContext('a' + i) }} {% endfor %}`;
const output = env.renderString(tpl, {a1: 10, a2:20,  a3: 30, b: 1, c: 2});
console.log(output);

Upvotes: 1

Related Questions