无法使用 Nunjucks for 循环获取数组中项目的索引
Cannot get index of item in array with Nunjucks for loop
我在从 Nunjucks {% for %}
循环获取数组中项目的索引时遇到一些问题。
我定位的数组很简单,看起来像这样
pages[1,2,3]
这是 Nunjucks 循环
{% for i,p in data.tickets.pages %}
{{ i }} : {{ p }}
{% endfor %}
问题是
{{ p }}
输出 1,2,3
但 {{ i }}
不输出任何内容。
如果有人能告诉我如何解决这个问题,我将不胜感激。
通常 nunjucks
等待 array
的单个迭代器。
当您使用多迭代器并传递 array
时,nunjucks
按迭代器集拆分每个 array
元素。
{% set pages = [[10, 11], [12, 13]] %}
{% for a, b in pages %}
{{a}},{{b}}
{% endfor %}
---
10:11
12:13
您可以使用range
,将数组转换为对象(元素顺序可能会丢失)或使用loop.index0
'/loop.index
var nunjucks = require('nunjucks');
var env = nunjucks.configure();
// range
var res = nunjucks.renderString(`
{% for i in range(0, items.length) %}
{% set item = items[i] %}
{{i}}: {{item}}
{% endfor %}`,
{items: [10, 12]}
);
console.log(res);
// array to object
res = nunjucks.renderString(`
{% for i, item in items %}
{{i}}: {{item}}
{% endfor %}`,
{items: Object.assign({}, [10, 12])}
);
console.log(res);
// loop.index0
res = nunjucks.renderString(`
{% for item in items %}
{{loop.index0}}: {{item}}
{% endfor %}`,
{items: [10, 12]}
);
console.log(res);
要在 for 循环中获取索引,请使用 loop.index
(loop.index 以 1
开头)
要获得标准行为(以 0
开头),请使用 loop.index0
data.tickets.pages = [1, 2, 3];
模板代码(loop.index
)
{% for page in data.tickets.pages %}
{{loop.index}}: {{ page }}
{% endfor %}
输出
1:1
2:2
3:3
模板代码(loop.index0
)
{% for page in data.tickets.pages %}
{{loop.index0}}: {{ page }}
{% endfor %}
输出
0:1
1:2
2:3
另见 nunjucks docs
loop.index
:循环的当前迭代(1索引)
loop.index0
:循环的当前迭代(0索引)
loop.revindex
:直到结束的迭代次数(1个索引)
loop.revindex0
:直到结束的迭代次数(基于0)
loop.first
: boolean表示第一次迭代
loop.last
: 表示最后一次迭代的布尔值
loop.length
: 项目总数
对于通过 Google 或其他方式来到这里的任何人。我能够直接在我的模板中使用上述范围循环的方法,甚至嵌套循环。
这是我直接在 nunjucks 模板中的部分代码:
<ul class="index">
{% for x in range(0, dbReport.sections.length) %}
{% set section = dbReport.sections[x] %}
<li>
<strong>{{ x + 1 }}</strong> {{ section.sectionTitle }}
<ul>
<li>
<strong>{{ x + 1 }}.1</strong> Section components:
<ul>
{% for y in range(0, section.subSections.length) %}
{% set subSection = section.subSections[y] %}
<li>
<strong>{{ x + 1 }}.1.{{ y + 1 }}</strong> {{subSection.subSectionTitle}}
</li>
{% endfor %}
</ul>
</li>
</ul>
</li>
{% endfor %}
</ul>
{%- for pageIndex, page in collections.pages.entries() -%}
<div class="page" id="page-{{ pageIndex + 1 }}">
{{ page.templateContent | safe }}
</div>
{%- endfor -%}
我在从 Nunjucks {% for %}
循环获取数组中项目的索引时遇到一些问题。
我定位的数组很简单,看起来像这样
pages[1,2,3]
这是 Nunjucks 循环
{% for i,p in data.tickets.pages %}
{{ i }} : {{ p }}
{% endfor %}
问题是
{{ p }}
输出 1,2,3
但 {{ i }}
不输出任何内容。
如果有人能告诉我如何解决这个问题,我将不胜感激。
通常 nunjucks
等待 array
的单个迭代器。
当您使用多迭代器并传递 array
时,nunjucks
按迭代器集拆分每个 array
元素。
{% set pages = [[10, 11], [12, 13]] %}
{% for a, b in pages %}
{{a}},{{b}}
{% endfor %}
---
10:11
12:13
您可以使用range
,将数组转换为对象(元素顺序可能会丢失)或使用loop.index0
'/loop.index
var nunjucks = require('nunjucks');
var env = nunjucks.configure();
// range
var res = nunjucks.renderString(`
{% for i in range(0, items.length) %}
{% set item = items[i] %}
{{i}}: {{item}}
{% endfor %}`,
{items: [10, 12]}
);
console.log(res);
// array to object
res = nunjucks.renderString(`
{% for i, item in items %}
{{i}}: {{item}}
{% endfor %}`,
{items: Object.assign({}, [10, 12])}
);
console.log(res);
// loop.index0
res = nunjucks.renderString(`
{% for item in items %}
{{loop.index0}}: {{item}}
{% endfor %}`,
{items: [10, 12]}
);
console.log(res);
要在 for 循环中获取索引,请使用 loop.index
(loop.index 以 1
开头)
要获得标准行为(以 0
开头),请使用 loop.index0
data.tickets.pages = [1, 2, 3];
模板代码(loop.index
)
{% for page in data.tickets.pages %}
{{loop.index}}: {{ page }}
{% endfor %}
输出
1:1
2:2
3:3
模板代码(loop.index0
)
{% for page in data.tickets.pages %}
{{loop.index0}}: {{ page }}
{% endfor %}
输出
0:1
1:2
2:3
另见 nunjucks docs
loop.index
:循环的当前迭代(1索引)loop.index0
:循环的当前迭代(0索引)loop.revindex
:直到结束的迭代次数(1个索引)loop.revindex0
:直到结束的迭代次数(基于0)loop.first
: boolean表示第一次迭代loop.last
: 表示最后一次迭代的布尔值loop.length
: 项目总数
对于通过 Google 或其他方式来到这里的任何人。我能够直接在我的模板中使用上述范围循环的方法,甚至嵌套循环。
这是我直接在 nunjucks 模板中的部分代码:
<ul class="index">
{% for x in range(0, dbReport.sections.length) %}
{% set section = dbReport.sections[x] %}
<li>
<strong>{{ x + 1 }}</strong> {{ section.sectionTitle }}
<ul>
<li>
<strong>{{ x + 1 }}.1</strong> Section components:
<ul>
{% for y in range(0, section.subSections.length) %}
{% set subSection = section.subSections[y] %}
<li>
<strong>{{ x + 1 }}.1.{{ y + 1 }}</strong> {{subSection.subSectionTitle}}
</li>
{% endfor %}
</ul>
</li>
</ul>
</li>
{% endfor %}
</ul>
{%- for pageIndex, page in collections.pages.entries() -%}
<div class="page" id="page-{{ pageIndex + 1 }}">
{{ page.templateContent | safe }}
</div>
{%- endfor -%}