Helpers & filters
Helpers 是可以从页面和布局访问的函数,用于帮助渲染内容。
Filters
有不同类型的 helpers;最常见的类型是 filter(过滤器),用于转换值。一些模板引擎,例如 Nunjucks,有几个内置过滤器,但你可以添加更多:
// 用于将字符串转换为大写的过滤器
site.filter("uppercase", (value) => value.toUpperCase());
然后,在你的模板中使用它:
<h1>{{ title |> uppercase }}</h1>
<h1>{{ title | uppercase }}</h1>
export default function (data, filters) {
const text = filters.uppercase(data.title);
return `<h1>${text}</h1>`;
}
<h1><%= filters.uppercase(title) %></h1>
如果你的过滤器是异步的,将 true
设置为第三个参数:
site.filter("async_filter", async (value) => value, true);
Warning
并非所有模板引擎都支持异步过滤器。
内置过滤器
Lume 包含以下方便的预装过滤器:
Helpers
一些模板引擎允许添加与过滤器不同的其他 helpers,例如自定义标签。为了配置这个,有 helper()
方法,它允许添加任何通用的 helper。
site.helper("uppercase", (text) => text.toUpperCase(), { type: "tag" });
{{ uppercase user.name }}
第三个参数是一个具有不同属性的对象:
type
: helper 的类型。它可以是tag
、filter
或任何其他类型,具体取决于模板引擎。async
: 设置为true
以将 helper 配置为异步。body
: 设置为true
以配置 helper 接受 body(仅 nunjucks 自定义标签支持)
自定义标签与 body 的示例:
site.helper("uppercase", (body) => body.toUpperCase(), {
type: "tag",
body: "true",
});
{{ uppercase }}
Hello, {{ user.name }}
{{ enduppercase }}
Note
方法 filter()
只是 helper()
的快捷方式,带有 { type: "filter" }
。