首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nunjucks帮助器函数

Nunjucks帮助器函数
EN

Stack Overflow用户
提问于 2018-03-12 23:53:53
回答 1查看 1.8K关注 0票数 1

我正在使用Mozilla的Nunjucks模板解析引擎创建HTML。我过去用过Handlebar,我正在寻找Nunjucks的方式来做Handlebars (用Javascript编写的普通函数,可以在模板中调用和传递数据进行转换)。

我目前的用例是,我得到一个像2018-03-12这样的可排序ISO8601格式的yyyy-mm-dd日期,我需要将其转换为德国标准日期格式dd.mm.yyyy (12.03.2018)以进行显示。

到目前为止,我在我的模板中使用

代码语言:javascript
复制
{{ date.split('-').reverse().join('.') }}

现在,当我有很多日期需要格式化时,或者即使我想进行特定于偏好的格式化,I#d都喜欢将date传递给一个帮助函数formatDate,它会为我执行转换:

文件:./helper/functions.njk

代码语言:javascript
复制
{% set
  formatDate = function(date) {
    if (typeof date !== 'string') {
      return date
    } else {
      return date.split('-').reverse().join('.')
    }
  }
%}

然后我想在我的页面模板中使用它,比如

代码语言:javascript
复制
{{ formatDate(date) }}

对于这个简单的用例,过滤器也可以工作:

代码语言:javascript
复制
{{ date | formatDate }}

但是似乎你不能在Nunjucks中定义这样的函数:

代码语言:javascript
复制
[Compile Error] expected block end in set statement

我是不是遗漏了什么,或者Nunjucks在这方面比车把更弱?

这里的用例很简单,但是这些helper函数的另一个用例是,例如,从工作提供列表中提取一个唯一的城市列表,然后您可以迭代该列表并创建一个下拉列表,其中包含提供工作的城市的字母顺序列表。

EN

回答 1

Stack Overflow用户

发布于 2018-03-13 18:07:10

Nunjucks会解析{{ }}{% %}括号中的所有代码,所以你不能在模板中使用js-code。大多数函数,如typeof,在使用之前必须由addGlobal声明。我使用date.split and ...来“检查”date是否为string

代码语言:javascript
复制
// 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') }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49239442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档