2
在StringTemplate的 - 我已經在某些項目用於發射的C代碼 - 空白前綴中,輸出線在自動添加:Jinja2的自動創建前綴空白
PrintCFunction(linesGlobal, linesLocal) ::= <<
void foo() {
if (someRuntimeFlag) {
<linesGlobal>
if (anotherRuntimeFlag) {
<linesLocal>
}
}
}
>>
當該模板在StringTemplate的呈現,空白 在多行行的前綴全局和行本地字符串 被複製爲發出的所有行。生成的C代碼是 如:
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提供了一種我錯過的更好的方式嗎?