2016-02-24 3 views
0

Учитывая макрос:вызова nunjucks шаблон макроса с использованием имени переменной

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

Есть ли способ, чтобы вызвать его, используя имя переменной:

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

Кроме того, как я могу вызвать макрос из обычая тег? Я создал тег, который может принимать эти переменные, но не уверен, как вставить макрос оттуда.

ответ

0

I думаю У меня есть ответ на этот вопрос. Я работаю над этой самой проблемой, и у меня есть такая работа. Может быть, вы можете взять то, что я предлагаю здесь, и расширить его.

Основная предпосылка заключается в ручной от рендеринга в другой макрос, например, так:

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

Тогда:

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

То, что я не понял, все же, как оценить переменная, переданная в шаблон из внешнего источника.

2

Простой способ сделать это состоит в использовании тока 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) }} 
Смежные вопросы