Неожиданные переводы строк Jinja2 при использовании макросовPython

Программы на Python
Ответить
Anonymous
 Неожиданные переводы строк Jinja2 при использовании макросов

Сообщение Anonymous »

Я визуализирую некоторый код YAML с помощью Jinja2, и мне не удается понять, откуда берется эта новая строка при вызове макроса.
Вот мой код YAML:
names:
- Bob
- Jason
- James

Вот мой шаблон Jinja2:
{% macro print_name(data)%}
{{ data }}
{% endmacro %}
People {
{% for name in names %}
Name {
{{ print_name(name) }}
}
{% endfor %}
}

Вот код Python, который объединяет все это:
import yaml
from jinja2 import Environment, FileSystemLoader

def main():
data = yaml.load(open('config_files/test.yml'), Loader=yaml.FullLoader)
env = Environment(loader = FileSystemLoader('.'), trim_blocks=True, lstrip_blocks=True)
template = env.get_template('templates/test.j2')

print(template.render(data))

if __name__ == '__main__':
main()

Обратите внимание, что я установил для Trim_blocks значение True, что, как я думал, удалит эти символы новой строки, однако это не сработало.
Я хочу, чтобы это печаталось так:
People {
Name {
Bob
}
Name {
Jason
}
Name {
James
}
}

Однако это печатается так:
People {
Name {
Bob

}
Name {
Jason

}
Name {
James

}
}

Обратите внимание на дополнительную новую строку после имени.
Если я добавлю тире в тег вызова макроса, чтобы попытаться удалить лишнюю новую строку, например: { { print_name(name) -}}, то он портит отступ следующей строки и печатает вот так:
People {
Name {
Bob
}
Name {
Jason
}
Name {
James
}
}

Есть идеи?
РЕДАКТИРОВАТЬ:
Чтобы упростить задачу, я создал список в Python вместо использования отдельного файла YAML.
Код Python:
import yaml
from jinja2 import Environment, FileSystemLoader

def main():

names = ["Bob", "Jason", "James"]
env = Environment(loader = FileSystemLoader('.'), trim_blocks=True, lstrip_blocks=True)
template = env.get_template('templates/test.j2')
print(template.render(names=names))

if __name__ == '__main__':
main()

Но все равно печатается с дополнительными символами новой строки:
People {
Name {
Bob

}
Name {
Jason

}
Name {
James

}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-macros
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»