这是我的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语句?
答案 0 :(得分:12)
您可以使用macros,为类渲染编写宏,然后递归调用它:
{% 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;
}
}