2016-03-22 17 views
1

:nunjucks nesne oluşturmak set şimdi böyle bir şey yapmak istedim <a href="https://mozilla.github.io/nunjucks/templating.html#set" rel="nofollow">set as a block</a> kullanarak destekler nunjucks olarak

{% set navigationItems %} 
    {% for item in items %} 
    { name: item.name, url: item.url }{% if not loop.last %},{% endif %} 
    {% endif %} 
{% endset %} 

Sonra öylesine gibi başka makro giriş nesnesi olarak bu değişkeni çağırmak:

{{ navigation(items=[navigationItems]) }} 

Bununla birlikte, navigationItems bir dizi-literal değil, bir dize olarak değerlendirilir. Nasıl bir fikir, ya da bu mümkün mü?

Teşekkürler.

cevap

1

Neyi başarmaya çalıştığınızdan tam olarak emin değilim. items adında bir dizi üzerinde döngü yapmak ve navigationItems adlı yeni bir diziye kopyalamak istediğiniz gibi görünüyor. Belki de items, makroya geçmek istediğinizden daha fazla anahtar içeriyor mu?

Ben aksi takdirde sadece şöyle navigationItems içine items kopyası olabilir, bu varsayımı yapacağım:

{% set navigationItems = items %}

Bu örnek çalışır:

{% 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 değerleri description anahtarı içerirler navigationItems dizisine geçirilmez. Eğer ben olsaydım, anahtarını navigation makrosuna geçiririm çünkü anahtarları: name ve url her iki dizide de aynıdır. Buradaki şablon, Javascript veya Ruby'de neredeyse map yöntemine benzemektedir.