Jinja2自动创建前缀空格

时间:2013-02-14 15:13:31

标签: jinja2 string-formatting whitespace indentation template-engine

在StringTemplate中 - 我在一些项目中使用它来发出C代码 - 空格前缀会自动添加到输出行中:

PrintCFunction(linesGlobal, linesLocal) ::= <<
void foo() {
    if (someRuntimeFlag) {
        <linesGlobal>
        if (anotherRuntimeFlag) {
            <linesLocal>
        }
    }
}
>>

在StringTemplate中呈现此模板时,为空白 为多行 linesGlobal linesLocal 字符串添加前缀, 将复制所有发出的行。生成的C代码是 e.g:

void foo() {
    if (someRuntimeFlag) {
        int i;
        i=1;   // <=== whitespace prefix copied in 2nd
        i++;   // <=== and 3rd line
        if (anotherRuntimeFlag) {
            int j=i;
            j++; //  <=== ditto
        }
    }
}

我是Jinja2的新手 - 试图复制它,看看我是否可以使用Python / Jinja2做同样的事情:

#!/usr/bin/env python
from jinja2 import Template

linesGlobal='\n'.join(['int i;', 'i=1;'])
linesLocal='\n'.join(['int j=i;', 'j++;'])

tmpl = Template(u'''\
void foo() {
    if (someRuntimeFlag) {
        {{linesGlobal}}
        if (anotherRuntimeFlag) {
            {{linesLocal}}
        }
    }
}
''')

print tmpl.render(
    linesGlobal=linesGlobal,
    linesLocal=linesLocal)

......但看到它产生了这个:

void foo() {
    if (someRuntimeFlag) {
        int i;
i=1;
        if (anotherRuntimeFlag) {
            int j=i;
j++;
        }
    }
}

......这不是我想要的。 我设法使输出发出适当的空格前缀:

...
if (someRuntimeFlag) {
    {{linesGlobal|indent(8)}}
    if (anotherRuntimeFlag) {
        {{linesLocal|indent(12)}}
    }
}

...但这可能是坏事,因为我需要手动计算空格 我发出的每一根弦......

肯定Jinja2提供了一种我错过的更好的方式吗?

1 个答案:

答案 0 :(得分:1)

还没有答案,因为很简单,Jinja2不支持此功能。

然后open ticket for this feature - 如果您关心它,请加入讨论。