由于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
被评估为字符串,而不是数组文字。知道如何,或者是否可能?
感谢。
答案 0 :(得分:2)
我不确定你要完成什么。看起来你想要遍历一个名为127.0.0.1 www.wordpress.dev
的数组并将其复制到一个名为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: 'StackOverflow',
url: 'http://stackoverflow.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
在两个数组中都是相同的。
这里的模式几乎就像Javascript或Ruby中的url
方法。