【问题标题】:Nunjucks helper functionsNunjucks 辅助函数
【发布时间】: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 强大吗?

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

【问题讨论】:

  • 检查addGlobaladdFilter API。
  • 问题是我不想将它包含在我的一般 Nunjucks 配置中,我希望在每次导入的基础上都有它。据我深入研究,这似乎在 Nunjucks 中不可用 - 另一方面,Handlebars 助手也需要通过配置进行全局注册,所以没有什么不同。

标签: handlebars.js nunjucks


【解决方案1】:

Nunjucks 解析 {{ }}{% %} 括号中的所有代码,因此您不能在模板中使用 js-code。大多数函数如typeof 必须在使用前由addGlobal 声明。我使用date.split and ... 来“检查”该日期是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') }}

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 2021-05-24
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多