Skip to content

模版语法 进阶

block

block 让你定义一块可以被 子模板覆盖(override) 的区域。

base.njk

njk
block 定义一个块,子模板可以覆盖这个块。

{% block content %}
   这里的内容可以被覆盖
{% endblock %}

然后 继承 base.njk

njk
{% extends "base.njk" %}

{% block content %}
  <h1>大王叫我来巡山!!!</h1>
{% endblock %}

渲染结果

html
block 定义一个块,子模板可以覆盖这个块。

<h1>大王叫我来巡山!!!</h1>

super

super 可以用来调用父模板的内容。

njk
{% extends "base.njk" %}

{% block content %}
  {{ super() }}
  <h1>大王叫我来巡山!!!</h1>
{% endblock %}

渲染结果

block 定义一个块,子模板可以覆盖这个块。



  这里的内容可以被覆盖

  <h1>大王叫我来巡山!!!</h1>

set

set 可以设置和修改变量

{{ username }}
{% set username = "joe" %}
{{ username }}

include

引入其他模板代码

{% include "header.njk" %}

如果希望在文件不存在的时候不要报错

{% include "missing.html" ignore missing %}

macro

类似编程中的函数。

macro 中不要有异步内容!

{% macro field(name, value='', type='text') %}
<div class="field">
  <input type="{{ type }}" name="{{ name }}" value="{{ value | escape }}" />
</div>
{% endmacro %}

调用

{{ field('username') }}

{{ field('password', type='password') }}

import

import 是为了引入其他模板中的 macro 或 filter 等。

njk
{% macro hello() %}
  <h1>Hello World</h1>
{% endmacro %}

{% macro hello_name(name) %}
  <h1>Hello {{ name }}</h1>
{% endmacro %}

例 1:

{% from "macros.njk" import hello, hello_name %}

{{ hello() }}

{{ hello_name("qins") }}

例 2:

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

{{ macros.hello() }}

{{ macros.hello_name("qins") }}

filter

https://mozilla.github.io/nunjucks/cn/templating.html#filter

{% filter upper %}
  hello world
{% endfilter %}

filter 标签内的内容全部会被 filter 处理。

call 与 caller

{% macro slogan() %}
  我们的口号是:{{ caller() }}
{% endmacro %}

{% call slogan() %}
  大王叫我来巡山!!!
{% endcall %}

渲染结果:

我们的口号是:
大王叫我来巡山!!!

正则表达式

https://mozilla.github.io/nunjucks/cn/templating.html#function-calls

全局函数 (Global Functions)

https://mozilla.github.io/nunjucks/cn/templating.html#global-functions

内置的过滤器

https://mozilla.github.io/nunjucks/cn/templating.html#part-cda1d805a3577fa5