我创建了一个动态调用新宏的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 %}
答案 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)。不是我需要的具体情况,但我只是想把它扔出去。