Jinja2 ASCII到String

时间:2015-04-09 02:51:05

标签: python c++ jinja2 systemc

我的Jinja2模板中有这一行:

{% for type in types %}
    top -> {{(loop.index0 + 'a')|string}}(var{{loop.index0}});
{% endfor %}

其中types是C ++中各种类型的列表,在模板的其他地方使用,输出是SystemC程序的一部分,用于初始化模块信号。 目标是获得这样的输出,字符从小写a开始:

top -> a(var0);
top -> b(var1);

然而,它给出了这个错误:"不支持的操作数类型+:' int'和' str'"所以我尝试将模板更改为:

{% for type in types %}
    top -> {{(loop.index0 + 'a'|int)|string}}(var{{loop.index0}});
{% endfor %}

然后输出就是这个

top -> 0(var0);
top -> 1(var1);

似乎问题是没有办法在Jinja2模板中将整数转换为相应的ASCII字符。我试过" chr()"但这是一个Python函数,而不是Jinja2函数,并且不起作用。我想知道是否有人有过这方面的经验并能帮助我吗?

2 个答案:

答案 0 :(得分:1)

a和b是你的类型吗?如果是这样,您可以直接使用他们的字符串值:

template.cpp

{% for type in types %}
top -> {{type}}(var{{loop.index0}});
{% endfor %}

main.py

import jinja2
import os.path
template_dir = os.path.dirname(__file__)
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
                               autoescape = False)

t = jinja_env.get_template('template.cpp')
types = ['a', 'b', 'c']
print (t.render(types=types))
运行的

main.py输出:

top -> a(var0);

top -> b(var1);

top -> c(var2);

答案 1 :(得分:1)

回答标题问题提出的问题:" Jinja2 ASCII to String"

# Very idiomatic. 
# Prints "a" if 'my_index' is 0, "b" if 1, etc.
{{ "abcdefghijklmnopqrstuvwxyz"[my_index] }}

# appeasing old-schoolers :)
# Prints "a" if 'my_index' is 97, "b" if 98, etc.
{{ "abcdefghijklmnopqrstuvwxyz"[my_index - 97] }}