【发布时间】:2018-03-13 18:07:10
【问题描述】:
我正在使用 Mozilla 的 Nunjucks 模板解析引擎创建 HTML。我过去使用过 Handlebars,我正在寻找 Nunjucks 的方式来做 Handlebars 助手(用 Javascript 编写的普通函数,可以调用并传递数据以在模板中进行转换)。
我目前的用例是我得到一个可排序的 ISO 8601 格式 yyyy-mm-dd 的日期,例如 2018-03-12,我需要将其转换为德国标准日期格式 dd.mm.yyyy (12.03.2018) 以进行显示。
到目前为止,我正在我的模板中使用
{{ date.split('-').reverse().join('.') }}
现在,当我有很多需要格式化的日期时,或者即使我想做特定于偏好的格式化,我#d 喜欢将 date 传递给一个帮助函数 formatDate,它会为我进行转换:
文件:./helper/functions.njk
{% set
formatDate = function(date) {
if (typeof date !== 'string') {
return date
} else {
return date.split('-').reverse().join('.')
}
}
%}
然后我想在我的页面模板中使用它
{{ formatDate(date) }}
对于这个简单的用例,过滤器也可以工作:
{{ date | formatDate }}
但您似乎无法在 Nunjucks 中定义这样的函数:
[Compile Error] expected block end in set statement
在这方面我有什么遗漏或者 Nunjucks 不如 Handlebars 强大吗?
这里的用例很简单,但是这些辅助函数的另一个用例是例如从工作机会列表中提取唯一的城市列表,然后您可以对其进行迭代并创建一个下拉列表,其中包含提供工作的城市的字母列表。
【问题讨论】:
-
检查
addGlobal和addFilterAPI。 -
问题是我不想将它包含在我的一般 Nunjucks 配置中,我希望在每次导入的基础上都有它。据我深入研究,这似乎在 Nunjucks 中不可用 - 另一方面,Handlebars 助手也需要通过配置进行全局注册,所以没有什么不同。