Как рекурсивно вызывать макрос в jinja2?

Это мой шаблон jinja для генерации кода C # из моей модели данных

using System; namespace {{ domain["ns"] }} { {% for class in domain["content"] %} public class {{ class["name"] }} { #region Inners {{ class["innerClass"] }} #endregion #region Props {% for field in class["content"] %} {% if field["readonly"] == "true" %} {% set readonly="private" %} {% else %} {% set readonly="" %} {% endif %} public {{ field["type"] }} {{ field["name"] }} {get; {{ readonly }} set{ if ({{ field["constraint"] }}){ {{ field["name"] }}=value; }else { throw new Exception("Inserted value for {{ field["name"] }} is not valid!"); } } } {% endfor %} #endregion } {% endfor %} } 

это мой вопрос, для генерации внутренних классов, я хочу, чтобы рекурсивно цикл на моей модели данных. Как я могу передать класс ["innerClass"] в качестве параметра в свой первый оператор for?

Вы можете использовать макросы , писать макрос для рендеринга класса, а затем вызывать его рекурсивно:

 {% macro render_class(class) -%} class {{ class.name }} { {% for field in class.fields %} int {{ field }}; {% endfor %} {% for subclass in class.subclasses %} {{ render_class(subclass) }} {% endfor %} } {%- endmacro %} {% for class in classes %} {{ render_class(class) }} {% endfor %} 

Это хорошо работает, но не имеет дело с правильным отступом подклассов , приводящим код следующим образом:

 class Bar { int meow; int bark; class SubBar { int joe; int pete; } }