Jinja2 как удалить завершающую строку новой строки
Я использую jinja 2 для вывода файла yaml, но не могу избавиться от завершающей новой строки и конца цикла for. Например, ниже
- request:
path: {{ path }}
headers:
origin: 'somedomain.com'
user-agent: 'agent'
referer: 'some.domain.com'
authority: 'somedomain.com'
querystring:
{% for key, value in querystring.items() -%}
{{ key }}: '{{ value }}'
{% endfor %}
response:
content:
file: {{ content }}
дает мне вывод:
- request:
path: /some/path
headers:
origin: 'somedomain.com'
user-agent: 'agent'
referer: 'somedomain.com'
authority: 'somedomain.com'
querystring:
postcode: 'xxxxxx'
houseNo: '55'
response:
content:
file: address.json
С дополнительной пустой пустой строкой после дома No. Как мне избавиться от этой строки?
Ответы
Ответ 1
Измените свой цикл, чтобы удалить белые пробелы из верхней и нижней части вывода (обратите внимание на "-" при закрытии цикла for:
{% for key, value in querystring.items() -%}
{{ key }}: '{{ value }}'
{%- endfor %}
В моих тестах (используя https://github.com/abourguignon/jinja2-live-parser), "-" должен появиться после первого {%
, а не до последнего достичь того, о чем вы просите.
Документы: http://jinja.pocoo.org/docs/dev/templates/#whitespace-control
Ответ 2
Я думаю, вы можете избавиться от него с помощью управления пробелами. Таким образом, я бы изменил блок endfor
на {% endfor -%}
Посмотрите, что это делает!
Ответ 3
Я нашел способ решить эту проблему:
- request:
path: {{ path }}
headers:
origin: 'somedomain.com'
user-agent: 'agent'
referer: 'some.domain.com'
authority: 'somedomain.com'
querystring: >-
{% for key, value in querystring.items() -%}
{{ key }}: '{{ value }}'
{% endfor %}
response:
content:
file: {{ content }}
-
>
, |
: "clip": сохранить строку, удалить завершающие пустые строки.
-
>-
, |=
: "strip": удалите фид строки, удалите завершающие пустые строки.
-
>+
, |+
: "сохранить": сохранить фид строки, сохранить конечные пустые строки.
спасибо Стив Беннетт пост:
В YAML, как я разбиваю строку на несколько строк?
Ответ 4
Вы можете подавить рендеринг следующих строк:
<% for ... %>
<% endfor %>
<% if ... %>
<% endif %>
установив trim_blocks = True и lstrip_blocks = True в вашей среде jinja2. Смотрите пример ниже, информация из их документов
context = {'querystring': querystring, 'path': path, 'content': content}
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates/'), trim_blocks=True, lstrip_blocks=True)
print(jinja_env.get_template('my_template.yaml').render(context))
Ответ 5
Для тех, кто использует Flask, которые приезжают сюда, эти строки помогли мне:
app = Flask(__name__)
app.jinja_env.lstrip_blocks = True
app.jinja_env.trim_blocks = True