0

我创建了一个动态调用新宏的 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 %}
4

1 回答 1

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 selection macro or dynamic macro calls。然后在 Swig 网站http://paularmstrong.github.io/swig/docs/filters/#safe上查找“安全”文档。

正是我需要的。

编辑:

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

于 2014-09-11T06:07:54.193 回答