【问题标题】:Do Swig's macros support calling nested macros, dynamically?Swig 的宏是否支持动态调用嵌套宏?
【发布时间】:2014-09-11 05:45:58
【问题描述】:

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

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

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

ma​​cros.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 %}

【问题讨论】:

    标签: macros swig-template


    【解决方案1】:

    好的,没多久。问题已解决!

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

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

    正是我需要的。

    编辑:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 2017-04-26
      • 2019-11-25
      • 2013-03-13
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多