python3 - jinja2 cómo eliminar la nueva línea de seguimiento
jinja2 tutorial (4)
Estoy usando jinja 2 para generar un archivo yaml pero parece que no puedo deshacerme de una nueva línea final y el final de un bucle for. Por ejemplo, el siguiente
- 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 da la salida:
- 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
Con una línea en blanco no deseada adicional después de houseNo. ¿Cómo me deshago de esta línea?
Cambie su bucle para eliminar los espacios en blanco de la parte superior Y de la parte inferior de la salida (observe "-" adicional en el cierre del bucle for):
{% for key, value in querystring.items() -%}
{{ key }}: ''{{ value }}''
{%- endfor %}
En mis pruebas (usando https://github.com/abourguignon/jinja2-live-parser ), el "-" debe aparecer después del primer {%
, no antes del último para lograr lo que está pidiendo.
Docs: http://jinja.pocoo.org/docs/dev/templates/#whitespace-control
Creo que puedes deshacerte de él usando la función de http://jinja.pocoo.org/docs/dev/templates/#whitespace-control . Por lo tanto, modificaría el bloque endfor
a {% endfor -%}
¡A ver si eso lo hace!
Encontré una manera de resolver este problema:
- 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": mantenga el avance de línea, elimine las líneas en blanco finales. -
>-
,|=
: "strip": elimina el avance de línea, elimina las líneas en blanco finales. -
>+
,|+
: "mantener": mantener el avance de línea, mantener las líneas en blanco al final.
Gracias al post de Steve Bennett : En YAML, ¿cómo puedo romper una cadena en varias líneas?
Puede suprimir la representación de las líneas siguientes:
<% for ... %>
<% endfor %>
<% if ... %>
<% endif %>
estableciendo trim_blocks = True y lstrip_blocks = True en su entorno jinja2. Vea el ejemplo a continuación, información de http://jinja.pocoo.org/docs/dev/templates/#whitespace-control
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))