Как заставить jinja2 удалять символы новой строки/пробелы, созданные тегами, но сохранять символы новой строки/пробелы, Python

Программы на Python
Anonymous
Как заставить jinja2 удалять символы новой строки/пробелы, созданные тегами, но сохранять символы новой строки/пробелы,

Сообщение Anonymous »

При использовании такого шаблона jinja2

Код: Выделить всё

A
{%- if flag == "0" %}
X
{%- elif flag == "1" %}
Y
{%- endif %}
B
моей интуитивной целью было бы, какими бы ни были A,B,X,Y, просто «вставить содержимое X,Y между A,B» code>".
Это означает, что я ожидаю для flag=0,1,2 следующих результатов: Обратите внимание, что A,B,X,Y являются не переменными jinja2, они являются заполнителями для статического текста в шаблоне, которые, однако,
также может состоять из нескольких строк.
Я ищу общий синтаксис, который удовлетворяет моим вышеупомянутым ожиданиям для любых A,X,Y,B< /code>,
т.е. если я редактирую содержимое полей A,X,Y,B, я не хочу трогать синтаксис.
Приведенный выше синтаксис не соответствует этому требованию, если поля A,B,X,Y содержат символы новой строки,
например. если я изменю его на

Код: Выделить всё

a
{%- if flag == "0" %}
x
{%- elif flag == "1" %}
y
y

{%- endif %}
b
(теперь a,b,x,y — настоящие символы, заполнитель Y состоит из нескольких строк и заканчивается пустой строкой)
так и будет произвести для flag=1 вывод

Код: Выделить всё

a
y
y
b
хотя, согласно моим ожиданиям, мне нужен этот результат

Код: Выделить всё

a
y
y

b
Поскольку я работаю с целевым языком, чувствительным к новой строке, мне теперь придется снова принять синтаксис шаблона.
Поэтому я ищу < em>общий синтаксис шаблона следующего вида

Код: Выделить всё

A
{????}
X
{????}
Y
{????}
B
который работает для любых заполнителей A,B,X,Y. В этой форме теги jinja2 и целевые заполнители должны быть на отдельных строках.
Что я пробовал до сих пор:
Игра с исходным шаблоном (переключение 6 знаков минус и добавление нескольких новых строк в 4 позиции) Я сгенерировал 2^10 = 1024 возможных шаблонов.
10 из них работают только для A,B,X,Y без новых строк , с символами новой строки ни один из них этого не делает.
Проблема, по-видимому, заключается в том, что использование синтаксиса {%- после Y удаляет новую строку перед { (желательно), но в то же время удаляет конечные пробелы Y (не требуется)
Учитывая заголовок вопроса, я знаю, что его нельзя четко различить, если Новая строка «вызвана» тегом или статическим текстом, но это лучшее, что я мог придумать.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ve-newline

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