我是java程序員學習python/jinja。jinja2宏vs jsp2.0標籤
我最大的牛肉與jinja2宏是有一個單一的來電()的限制。 例如,我可以做以下的jsp2標籤:
標籤DEF:
<% attribute name="title" fragment="true">
<div class='title'>${title}</div>
<div class='body'><jsp:doBody/></div>
用法:
<myTag>
<jsp:attribute name='title'>
<c:if test='${blah}'>This is only here sometimes</c:if>
</jsp:attribute>
<jsp:body>
<c:if test='${something}'>some dynamic content</c:if>
</jsp:body>
</myTag>
我想壓力這裏,是,無論是身體內容和「標題」屬性的內容爲動態。同時,有沒有黑客在這裏變量設置爲動態內容並通過他們的
現在讓我們來看看一個神社宏,做同樣的事情:
{% macro myTag(title='', caller) -%}
<div class='title'>{{ title }}</div>
<div class='body'>{{ caller() }}</div>
{%- endmacro %}
但等待! 我不容易把動態內容放入標題屬性!
{% call myTag(title='imagine putting some content here that involves 5 loops, 4 ifs and whatnot?') %}
{% if something %}some dynamic content{% endif %}
{% endcall %}
這是我作爲一個新手的問題,還是這是一個忍者的缺點?
這是一個合理的解決方案 - 比我建議的更具彈性。我把它稱爲合理的,並不好,因爲它比較冗長和沉重。此外,如果您想多次調用父宏,則必須多次定義這些一次性宏。 –
@dave:你可以傳遞宏本身而不是調用的結果('{{doTag(body = tag_Body)}}'並且在需要的時候用參數調用它。把宏看作函數(實際上它是jinja2中的函數)因此,就像使用函數一樣,不需要爲了多次使用而重複宏定義。 –