2014-09-11 72 views
0

我創建了一個可以動態調用新宏的Swig宏。我發現這樣做的結果是,來自嵌套宏的HTML標記不是呈現爲HTML,而是呈現爲包含我使用的HTML標記的HTML文本節點。我的測試標記只是一個「Hello World!」的H1元素。在元素內部。Do Swig的宏是否支持調用嵌套宏動態?

做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

好的,那不需要很長時間。問題解決了!

解決方案安全過濾器強制輸入不會自動轉義:

{% 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)嵌套宏不使用動態密鑰(宏[法]),而無需使用安全過濾器工作。不是我需要的具體情況,但只是想我會把它扔在那裏。