Macros 游泳';s宏是否支持动态调用嵌套宏?

Macros 游泳';s宏是否支持动态调用嵌套宏?,macros,swig-template,Macros,Swig Template,我创建了一个Swig宏,可以动态调用新宏。这样做的结果是,嵌套宏中的HTML标记不是呈现为HTML,而是呈现为包含我使用的HTML标记的HTML文本节点。我的测试标记只是一个H1元素,元素中有“Hello World!” Swig的宏是否支持调用嵌套宏?或者如何从嵌套宏获取HTML标记以呈现为HTML 下面是我用于此测试的确切代码: macros.html 主/父宏(HTML呈现精细): {%macro调用(宏)%} {%if(macro.name==“transitions”)%} {%imp

我创建了一个Swig宏,可以动态调用新宏。这样做的结果是,嵌套宏中的HTML标记不是呈现为HTML,而是呈现为包含我使用的HTML标记的HTML文本节点。我的测试标记只是一个H1元素,元素中有“Hello World!”

Swig的宏是否支持调用嵌套宏?或者如何从嵌套宏获取HTML标记以呈现为HTML

下面是我用于此测试的确切代码:

macros.html 主/父宏(HTML呈现精细):

{%macro调用(宏)%}
{%if(macro.name==“transitions”)%}
{%import“transitions.html”作为transitions%}
过渡!
{{transitions[macro.method](macro.vars)}
{%elseif(macro.name==“grid”)%}
{%import“grids.html”作为grids%}
网格!
{{grids[macro.method](macro.path,macro.vars)}
{%endif%}
{%endmacro%}
transitions.html 嵌套/子宏(呈现字符串):

{%macro slider(vars)%}
你好,滑块!
{%endmacro%}

好的,没花多长时间。问题解决了

解决方案安全过滤器强制输入不自动转义:

{% macro call(macro) %}

    {% if (macro.name === "transitions") %}
        {% import "transitions.html" as transitions %}

        <h1>Transitions!</h1>
        {{ transitions[macro.method](macro.vars)|safe }}

    {% elseif (macro.name === "grid") %}
        {% import "grids.html" as grids %}

        <h1>Grids!</h1>
        {{ grids[macro.method](macro.path, macro.vars)|safe }}

    {% endif %}

{% endmacro %}
{%macro调用(宏)%}
{%if(macro.name==“transitions”)%}
{%import“transitions.html”作为transitions%}
过渡!
{{transitions[macro.method](macro.vars)| safe}
{%elseif(macro.name==“grid”)%}
{%import“grids.html”作为grids%}
网格!
{{grids[macro.method](macro.path,macro.vars)| safe}
{%endif%}
{%endmacro%}
从这个问题中得到了想法:。 然后在Swig网站上查找“安全”文档

正是我需要的

编辑:

顺便说一句,我还发现,在不使用动态键(macro[method])的情况下,以正常方式(macro.method)调用嵌套宏在不使用安全过滤器的情况下也可以工作。这不是我的特殊情况所需要的,只是我想我会把它扔出去

{% macro slider(vars) %}
    <h1>Hello Slider!</h1>
{% endmacro %}
{% macro call(macro) %}

    {% if (macro.name === "transitions") %}
        {% import "transitions.html" as transitions %}

        <h1>Transitions!</h1>
        {{ transitions[macro.method](macro.vars)|safe }}

    {% elseif (macro.name === "grid") %}
        {% import "grids.html" as grids %}

        <h1>Grids!</h1>
        {{ grids[macro.method](macro.path, macro.vars)|safe }}

    {% endif %}

{% endmacro %}