Я Java программист, изучающий Python / Jinja .
Моя самая большая говядина с макросами 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>
что я хочу подчеркнуть , так это то, что и содержимое тела, и атрибут 'title' имеют содержимое, динамическое . кроме того, здесь нет хаков для установки переменных в динамический контент и их передачи.
теперь давайте посмотрим на макрос jinja, который делает то же самое:
{% macro myTag(title='', caller) -%}
<div class='title'>{{ title }}</div>
<div class='body'>{{ caller() }}</div>
{%- endmacro %}
но подождите! я не могу легко поместить динамический контент в атрибут title!
{% call myTag(title='imagine putting some content here that involves 5 loops, 4 ifs and whatnot?') %}
{% if something %}some dynamic content{% endif %}
{% endcall %}
это проблема с тем, что я новичок, или это недостаток дзиндзя?