nunjucks - Lauviah0622/Lavi-Note GitHub Wiki
據說好像是把 python 上面的 jinja 整個移植過來 JS 的 template engine
基本語法跟 JS 差不多
{{ username }}
{{ foo.bar }}
{{ foo["bar"] }}
可以直接使用環境給的變數,或者是另外宣告變數
可以想成在 JS 裡面是這樣的形式:
//nunjucks
{{foo | bar | baz}}
//js
baz(bar(foo))
{{ foo | title }} {{ foo | join(",") }} {{ foo | replace("foo", "bar") | capitalize }}
在 11ty 裡面有內建各種 filter 做使用
這裡的 if 判斷和 JS 一模一樣
{% if hungry %}
I am hungry
{% elif tired %}
I am tired
{% else %}
I am good!
{% endif %}
{%- for list %}
{{list.title}}
{%- endfor %}
解構
Object 版本
var food = {
'ketchup': '5 tbsp',
'mustard': '1 tbsp',
'pickle': '0 tbsp'
};
{% for ingredient, amount in food %}
Use {{ amount }} of {{ ingredient }}
{% endfor %}
Array 版本
//value
var points = [[0, 1, 2], [5, 6, 7], [12, 13, 14]];
//nunjeck
{% for x, y, z in points %}
Point: {{ x }}, {{ y }}, {{ z }}
{% endfor %}
在 loop 裡面有一些特別的變數可以用
- loop.index: 当前循环数 (1 indexed)
- loop.index0: 当前循环数 (0 indexed)
- loop.revindex: 当前循环数,从后往前 (1 indexed)
- loop.revindex0: 当前循环数,从后往前 (0 based)
- loop.first: 是否第一个
- loop.last: 是否最后一个
- loop.length: 总数
{% block article %}
{{ content | safe }}
{% endblock %}
能夠定義一個 block ,然後 include 他的 template 可以放入內容做使用?嗎?
有點像 function
{% macro field(name, value='', type='text') %}
<div class="field">
<input type="{{ type }}" name="{{ name }}"
value="{{ value | escape }}" />
</div>
{% endmacro %}
{# content | safe #}
除了上面原生的這些 API
nunjucks 可以自行新增語法