nunjucks 设置创建对象
nunjucks set create object
由于 nunjucks 现在支持使用 set as a block 我想做这样的事情:
{% set navigationItems %}
{% for item in items %}
{ name: item.name, url: item.url }{% if not loop.last %},{% endif %}
{% endif %}
{% endset %}
然后调用这个变量作为另一个宏的输入对象,像这样:
{{ navigation(items=[navigationItems]) }}
但是,navigationItems
被评估为字符串,而不是数组文字。知道怎么做,或者这是否可能?
谢谢。
我不太确定你想要完成什么。看起来您想遍历一个名为 items
的数组并将其复制到一个名为 navigationItems
的新数组中。也许 items
包含的键比您要传递给宏的键多?
我要做出这个假设,否则你可以像这样简单地将 items
复制到 navigationItems
中:
{% set navigationItems = items %}
这个例子有效:
{% macro navigation(items) %}
<ul>
{% for item in items %}
<li>{{ item.name }} - {{ item.url }}</li>
{% endfor %}
</ul>
{% endmacro %}
{% set websites = [
{
name: 'Google',
url: 'http://google.com',
description: 'A search engine'
},
{
name: 'GitHub',
url: 'http://github.com',
description: 'A webapp for your git repos'
},
{
name: 'Whosebug',
url: 'http://whosebug.com',
description: 'The answer: 42'
}] %}
{% set navigationItems = [] %}
{% for website in websites %}
{% set navigationItems = (navigationItems.push({name: website.name, url: website.url}), navigationItems) %}
{% endfor %}
{{ navigation(items=navigationItems) }}
websites
值包含一个 description
键,它不会传递给 navigationItems
数组。如果是我,我会直接将 website
传递给 navigation
宏,因为您的键:name
和 url
在两个数组中是相同的。
这里的模式几乎就像 Javascript 或 Ruby 中的 map
方法。
由于 nunjucks 现在支持使用 set as a block 我想做这样的事情:
{% set navigationItems %}
{% for item in items %}
{ name: item.name, url: item.url }{% if not loop.last %},{% endif %}
{% endif %}
{% endset %}
然后调用这个变量作为另一个宏的输入对象,像这样:
{{ navigation(items=[navigationItems]) }}
但是,navigationItems
被评估为字符串,而不是数组文字。知道怎么做,或者这是否可能?
谢谢。
我不太确定你想要完成什么。看起来您想遍历一个名为 items
的数组并将其复制到一个名为 navigationItems
的新数组中。也许 items
包含的键比您要传递给宏的键多?
我要做出这个假设,否则你可以像这样简单地将 items
复制到 navigationItems
中:
{% set navigationItems = items %}
这个例子有效:
{% macro navigation(items) %}
<ul>
{% for item in items %}
<li>{{ item.name }} - {{ item.url }}</li>
{% endfor %}
</ul>
{% endmacro %}
{% set websites = [
{
name: 'Google',
url: 'http://google.com',
description: 'A search engine'
},
{
name: 'GitHub',
url: 'http://github.com',
description: 'A webapp for your git repos'
},
{
name: 'Whosebug',
url: 'http://whosebug.com',
description: 'The answer: 42'
}] %}
{% set navigationItems = [] %}
{% for website in websites %}
{% set navigationItems = (navigationItems.push({name: website.name, url: website.url}), navigationItems) %}
{% endfor %}
{{ navigation(items=navigationItems) }}
websites
值包含一个 description
键,它不会传递给 navigationItems
数组。如果是我,我会直接将 website
传递给 navigation
宏,因为您的键:name
和 url
在两个数组中是相同的。
这里的模式几乎就像 Javascript 或 Ruby 中的 map
方法。