2016-03-22 3 views
1

を作成して設定しますただし、navigationItemsは配列リテラルではなく文字列として評価されます。どのように考えているか、あるいはこれが可能かどうか?nunjucksは今、私はこのような何かをやってみたかった<a href="https://mozilla.github.io/nunjucks/templating.html#set" rel="nofollow">set as a block</a>を使用してサポートしていnunjucksとしてオブジェクト

ありがとうございました。

答えて

1

私はあなたが達成しようとしていることを正確にはわかりません。 itemsという1つの配列をループし、navigationItemsという新しい配列にコピーしたいようです。おそらくitemsには、マクロに渡すよりも多くのキーが含まれていますか?

私はそうでなければ、単にそのようnavigationItemsitemsをコピーすることができ、その仮定を作るつもりです:

{% 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に渡されません。それが私だったら、あなたのキーがnameurlの両方の配列で同じであるので、navigationマクロに直接websiteを渡すだけです。

ここのパターンは、JavascriptまたはRubyのmapメソッドとほとんど同じです。

関連する問題

 関連する問題