J'utilise jinja 2 pour générer un fichier yaml, mais je n'arrive pas à me débarrasser d'une fin de ligne et du fin d'une boucle for Par exemple le dessous
- 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 }}
me donne la sortie:
- 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
Avec une ligne blanche supplémentaire indésirable après la maisonNo. Comment puis-je me débarrasser de cette ligne?
Changez votre boucle pour supprimer les espaces blancs du haut ET du bas de la sortie (remarquez un "-" supplémentaire à la fermeture de la boucle for):
{% for key, value in querystring.items() -%}
{{ key }}: '{{ value }}'
{%- endfor %}
Dans mes tests (avec https://github.com/abourguignon/jinja2-live-parser ), le "-" doit être placé après le premier {%
, pas avant le dernier pour obtenir ce que vous demandez.
Docs: http://jinja.pocoo.org/docs/dev/templates/#whitespace-control
Je pense que vous pouvez vous en débarrasser en utilisant le espace contrôle blanc . Ainsi, je modifierais le bloc endfor
en {% endfor -%}
Voyez si ça le fait!
J'ai trouvé un moyen de résoudre ce problème:
- 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": conserve le saut de ligne, supprime les dernières lignes vides.>-
, |=
: "strip": supprime le saut de ligne, supprime les lignes vierges.>+
, |+
: "garder": conserve le saut de ligne, conserve les lignes vierges.Thx Steve Bennett post: Dans YAML, comment puis-je rompre une chaîne sur plusieurs lignes?
Pour ceux qui utilisent Flask qui arrivent ici, ces lignes ont fait l'affaire pour moi:
app = Flask(__name__)
app.jinja_env.lstrip_blocks = True
app.jinja_env.trim_blocks = True
Vous pouvez supprimer le rendu des lignes ci-dessous:
<% for ... %>
<% endfor %>
<% if ... %>
<% endif %>
en définissant trim_blocks = True et lstrip_blocks = True dans votre environnement jinja2. Voir l'exemple ci-dessous, informations de leurs documents
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))