python — Jinja2 ASCII в строку

У меня была эта строка в моем шаблоне 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, и она не работает. Мне было интересно, есть ли кто-нибудь, кто имел опыт с этим и мог бы помочь мне?

1

Решение

А и В ваши типы? Если это так, вы можете просто использовать их строковые значения напрямую:

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

Другие решения

Отвечая на вопрос, заданный заглавным вопросом: «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] }}
1

По вопросам рекламы [email protected]