你可以根据需要来定制,比如定制模板加载。

new Environment([loaders], [opts])

实例化 Environment 时传入两个参数,一组 loaders 和配置项 opts。如果 loaders 不存在,则默认从当前目录或地址加载。loaders 可为一个或多个,如果传入一个数组,nunjucks 会按顺序查找直到找到模板。更多查看

opts 的配置有 autoescapethrowOnUndefinedtrimBlockslstripBlocks,在 configure 查看具体配置(express 和 watch 配置在这里不适用,而是在 进行配置)。

在 node 端使用 FileSystemLoader 加载模板,浏览器端则使用 通过 http 加载(或使用编译后的模板)。如果你使用了 的 api,nunjucks 会根据平台(node 或浏览器)自动选择对应的 loader。查看更多 。

render

env.render(name, [context], [callback])

渲染名为 name 的模板,使用 context 作为数据,如果 callback 存在,在完成时会调用,回调有两个参数:错误和结果( 查看 )。如果 callback 不存在则直接回返结果。

renderString

env.renderString(src, [context], [callback])

和 相同,只是渲染一个字符串而不是加载的模块。

addFilter

添加名为 name 的自定义过滤器,func 为调用的函数,如果过滤器需要异步的,async 应该为 true (查看 )。查看 Custom Filters

env.getFilter(name)

获取过滤器,传入名字返回一个函数。

addExtension

env.addExtension(name, ext)

添加一个名为 name 的扩展,ext 为一个对象,并存在几个指定的方法供系统调用,查看 Custom Tags

removeExtension

删除之前添加的扩展 name

getExtension

env.getExtension(name)

获取扩展,传入名字返回一个函数。

如果 name 扩展已经被添加,那返回 true。

addGlobal

env.addGlobal(name, value)

添加一个全局变量,可以在所有模板使用。注意:这个会覆盖已有的 name 变量。

getGlobal

env.getGlobal(name)

返回一个名为 name 的全局变量。

getTemplate

env.getTemplate(name, [eagerCompile], [callback])

获取一个名为 name 的模板。如果 eagerCompiletrue,模板会立即编译而不是在渲染的时候再编译。如果 callback 存在会被调用,参数为错误和模板,否则会直接返回。如果使用异步加载器,则必须使用异步的 api,内置的加载器不需要。查看 asynchronous support 和 。

env.express(app)

使用 nunjucks 作为 express 的模板引擎,调用后可正常使用 express。你也可以调用 ,将 app 作为 express 参数传入。

opts.autoescape

你可以通过这个配置控制是否全局开启模板转义,这对于创建高级过滤(如 html 操作)非常有用。正常情况你可以返回 SafeString,输出保持和输入一致不做任何处理,但这只在很少场景下有用。