Я не совсем уверен, чего вы пытаетесь достичь. Похоже, вы хотите перебрать один массив с именем 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
и url
одинаковы в обоих массивах.
Образец здесь почти как метод map
в Javascript или Ruby.