使用变量名称调用nunjucks模板宏

时间:2016-02-24 03:07:56

标签: javascript nunjucks

给定一个宏:

{% macro foo() %}
{% endmacro %}

有没有办法使用变量名称来调用它:

{% set fn = 'foo' %}
... call macro using 'fn'

或者我如何从自定义标签中调用宏?我创建了一个可以接受这些变量但不确定如何从那里插入宏的标记。

2 个答案:

答案 0 :(得分:3)

执行此操作的简单方法是使用当前context

let env = nunjucks.configure([
...
env.addGlobal('getContext', function(name) { 
    return (name) ? this.ctx[name] : this.ctx;
})

在模板中

{% macro foo (arg1, arg2) %}
    {{arg1}}{{arg2}}
{% endmacro %}

{% set fn = 'foo' %}
{{ getContext(fn)(arg1, arg2) }}

答案 1 :(得分:0)

我对此有一个答案。我一直在研究这个问题,并让它有点工作。也许你可以采取我在这里建议并扩展它。

基本前提是将渲染切换到另一个宏,如下所示:

{% macro eval(fn,data) %}
  {{ fn(data) }}
{% endmacro %}

然后:

{% set fn = foo %}
{% set data = { this: that } %}
{{ eval(fn,data) }}

我还没想到的是如何评估从外部源传递到模板中的变量。