Jinja2 转到列

Jinja2 go-to-column

我正在使用 Jinja2 执行代码生成。

除了生成正确缩进代码的小问题外,我还想执行某些行内对齐;示例用例是:

  1. 在特定列开始内联评论
  2. 赋值序列中的对齐运算符

(1) 的一小段摘录如下:

Sound_Chime_t chime_array[] = {
{%- for k, cmd in commands.items() %}
    {
        "{{ cmd['Sound Command'] }}", // command
        "{{ cmd['tag'] }}",           // tag
        {{ cmd['Priority'] }},        // priority
        {{ cmd['Mix'] }},             // mix
        {{ cmd['Loop'] }},            // loop
        {{ cmd['region'] }},          // region
        "{{ cmd['Sound File']}}"      // filename
    }{{ ',' if not loop.last else '' }}
{%- endfor %}
};

当然 //... 在模板中很好地对齐,但它不会在生成的代码中。

是否有一些(不太复杂的)方法来获得这个?

您可以使用两次 .format() 调用来对齐评论。第二个是值后偶尔需要的引号和逗号。这会将值填充为 20:

Sound_Chime_t chime_array[] = {
{%- for k, cmd in commands.items() %}
    {
        {{ '{:<20} // command'.format('"{}",'.format(cmd['Sound Command'])) }}
        {{ '{:<20} // tag'.format('"{},"'.format(cmd['tag'])) }}
        {{ '{:<20} // priority'.format('{},'.format(cmd['Priority'])) }}
        {{ '{:<20} // mix'.format('{},'.format(cmd['Mix'])) }}
        {{ '{:<20} // loop'.format('{},'.format(cmd['Loop'])) }}
        {{ '{:<20} // region'.format('{},'.format(cmd['region'])) }}
        {{ '{:<20} // filename'.format('"{}"'.format(cmd['Sound File'])) }}
    }{{ ',' if not loop.last else '' }}
{%- endfor %}
};