我正在使用Mozilla的Nunjucks模板解析引擎创建HTML。我过去用过Handlebar,我正在寻找Nunjucks的方式来做Handlebars (用Javascript编写的普通函数,可以在模板中调用和传递数据进行转换)。
我目前的用例是,我得到一个像2018-03-12这样的可排序ISO8601格式的yyyy-mm-dd日期,我需要将其转换为德国标准日期格式dd.mm.yyyy (12.03.2018)以进行显示。
到目前为止,我在我的模板中使用
{{ date.split('-').reverse().join('.') }}现在,当我有很多日期需要格式化时,或者即使我想进行特定于偏好的格式化,I#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在这方面比车把更弱?
这里的用例很简单,但是这些helper函数的另一个用例是,例如,从工作提供列表中提取一个唯一的城市列表,然后您可以迭代该列表并创建一个下拉列表,其中包含提供工作的城市的字母顺序列表。
发布于 2018-03-13 18:07:10
Nunjucks会解析{{ }}和{% %}括号中的所有代码,所以你不能在模板中使用js-code。大多数函数,如typeof,在使用之前必须由addGlobal声明。我使用date.split and ...来“检查”date是否为string。
// helpers.njk
{% macro formatDate(date) %}
{{ date.split and date.split('-').reverse().join('.') or date }}
{% endmacro %}
... // another macros
// usage
{% import 'helpers.njk' as helpers %}
{{ helpers.formatDate('2018-03-12') }}https://stackoverflow.com/questions/49239442
复制相似问题