Swig的宏支持动态调用嵌套宏吗?

时间:2014-09-11 05:45:59

标签: macros swig-template

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

Swig的宏支持调用嵌套宏吗?或者我如何从嵌套宏中获取HTML标记以呈现为HTML的任何想法?

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

macros.html 主/父宏(HTML渲染正常):

{% macro call(macro) %}

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

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

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

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

    {% endif %}

{% endmacro %}

transitions.html 嵌套/子宏(呈现字符串):

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

1 个答案:

答案 0 :(得分:0)

好的,这并不需要很长时间。问题已解决!

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

{% 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 %}

从这个问题中得出了这个想法:jinja2: macro selecting macro or dynamic macro calls。 然后查找了#34; safe&#34;在Swig网站上http://paularmstrong.github.io/swig/docs/filters/#safe

正是我所需要的。

修改

顺便说一下,我还发现在不使用安全过滤器的情况下,不使用动态密钥(宏[方法])以正常方式调用嵌套宏(macro.method)。不是我需要的具体情况,但我只是想把它扔出去。