cd ~

, with read , about 42min.

Nunjucks快速指南

Nunjucks (.njk) 是 Mozilla 开发的一个功能强大的 JavaScript 模板引擎。它深受 Python 的 Jinja2 启发。如果你用过 Python 的 Jinja2 或 Django 模板,你会觉得非常亲切。

这份指南分为 基础语法逻辑控制高级复用常用过滤器 四个部分。


一、 核心概念:两种标签

Nunjucks 最基本的语法只有两种符号:

  1. {{ }}输出变量。会把结果打印到页面上。
  2. {% %}执行逻辑。用于循环、判断、定义变量,不会直接输出内容。

二、 基础语法 (Variables)

1. 输出变量

{{ username }}
{{ user.id }}          <!-- 点语法访问属性 -->
{{ user['email'] }}    <!-- 括号语法访问属性 -->
copy success

2. 设置默认值 (防止报错)

如果变量不存在,可以使用 default 过滤器:

Hello, {{ username | default("Guest") }}
copy success

3. 定义变量 (Set)

在模板内部定义新变量:

{% set active_class = "is-active" %}
<div class="{{ active_class }}">...</div>
copy success

三、 逻辑控制 (Control Flow)

1. 条件判断 (If / Else)

{% if user.is_admin %}
  <button>Delete User</button>
{% elif user.is_editor %}
  <button>Edit User</button>
{% else %}
  <p>You have read-only access.</p>
{% endif %}
copy success

2. 循环 (Loops)

遍历数组或对象:

<ul>
{% for item in items %}
  <li>
    {{ loop.index }} - {{ item.title }}
    <!-- loop.index1 开始,loop.index00 开始 -->
    <!-- loop.first (是否是第一个), loop.last (是否是最后一个) -->
  </li>
{% else %}
  <li>这里没有数据 (items 为空时显示)</li>
{% endfor %}
</ul>
copy success

四、 过滤器 (Filters)

过滤器用于修改变量的输出,使用管道符 |

常用内置过滤器

链式调用:

{{ "hello world" | upper | replace("WORLD", "NJK") }}
copy success

五、 模板继承 (Inheritance) —— Nunjucks 的灵魂

这是 Nunjucks 最强大的地方,用于构建统一的网站布局。

1. 定义父模板 (layout.njk)

使用 block 定义“坑位”,留给子页面去填。

<!-- layout.njk -->
<!DOCTYPE html>
<html>
<head>
  <title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>
  <nav>导航栏</nav>

  <main>
    <!-- 这里是一个坑,名字叫 content -->
    {% block content %}{% endblock %}
  </main>

  <footer>页脚</footer>
</body>
</html>
copy success

2. 定义子页面 (page.njk)

使用 extends 继承父模板,并把内容填入对应的 block

<!-- page.njk -->
{% extends "layout.njk" %}

{% block title %}我的首页{% endblock %}

{% block content %}
  <h1>欢迎来到我的网站</h1>
  <p>这是正文内容。</p>
{% endblock %}
copy success

六、 组件与复用 (Macros & Includes)

1. Include (简单引入)

直接把另一个文件的内容粘贴过来,适合页眉、页脚。

{% include "footer.njk" %}
copy success

2. Macro (宏/组件)

类似于编程语言中的函数,用于生成可复用的 HTML 片段(如表单控件、卡片)。

定义宏 (forms.njk):

{% macro input(name, placeholder, type="text") %}
  <div class="field">
    <input type="{{ type }}" name="{{ name }}" placeholder="{{ placeholder }}">
  </div>
{% endmacro %}
copy success

使用宏:

{% import "forms.njk" as forms %}

<form>
  {{ forms.input("username", "请输入用户名") }}
  {{ forms.input("password", "请输入密码", "password") }}
</form>
copy success

七、 空白控制 (Whitespace Control)

Nunjucks 默认会保留代码中的换行符和空格。如果你想生成紧凑的代码,可以使用减号 -

示例:

<!-- 假设 tags = [1, 2, 3] -->
[{% for i in tags -%}
  {{ i }}
{%- endfor %}]
copy success

输出: [123] (没有多余的空格和换行)


八、 其他实用技巧

1. 原始块 (Raw)

如果你需要在页面上输出 {{ }} 这种符号(例如你在写 Vue.js 或 Handlebars 的教程),需要禁止 Nunjucks 解析:

{% raw %}
  这里的内容不会被 Nunjucks 解析:{{ variable }}
{% endraw %}
copy success

2. 导入上下文

include 默认会把当前页面的所有变量传给被引入的文件。
如果不想传,可以禁用:

{% include "component.njk" without context %}
copy success

总结速查表

功能 语法
输出 {{ var }}
逻辑 {% if condition %} ... {% endif %}
循环 {% for item in items %} ... {% endfor %}
过滤器 `{{ var
注释 {# 这是一个注释 #}
继承 {% extends "layout.njk" %}
定义块 {% block name %} ... {% endblock %}
引入 {% include "file.njk" %}
转义HTML `{{ html_str
cd ~
GO BACK (Backspace)
BACK TO TOP (ESC)
COMMENTS (C)