繁体   English   中英

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

[英]Call nunjucks template macro using variable name

给定一个宏:

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

有没有一种方法可以使用变量名来调用它:

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

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

最简单的方法是使用当前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) }}

我对此有一个答案。 我一直在解决这个问题,并且已经可以解决了。 也许您可以采纳我在这里提出的建议,并在此基础上进行扩展。

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

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

然后:

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

我还没有弄清楚如何评估从外部源传递到模板的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM