Ich weiß nicht genau, was Sie erreichen wollen. Es sieht so aus, als ob Sie ein Array namens items
überschleifen und in ein neues Array namens navigationItems
kopieren möchten. Vielleicht enthält items
mehr Schlüssel als Sie an das Makro übergeben möchten?
Ich werde diese Annahme machen, sonst hat man einfach items
in navigationItems
wie so kopieren könnte:
{% set navigationItems = items %}
Dieses Beispiel funktioniert:
{% 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
Werte einen description
Schlüssel enthalten welches nicht an das Array weitergegeben wird. Wenn ich es wäre, würde ich einfach website
direkt an das navigation
Makro weitergeben, da Ihre Schlüssel: name
und url
in beiden Arrays identisch sind.
Das Muster hier ist fast wie eine map
Methode in Javascript oder Ruby.