模版语法 进阶
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