2016-04-26 25 views
12

Sto usando jinja 2 per produrre un file yaml ma non riesco a sbarazzarmi di una nuova riga finale e della fine di un ciclo for. Ad esempio, la sottojinja2 come rimuovere newline finale

- 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 }} 

mi dà l'output:

- 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 un ulteriore riga vuota indesiderata dopo houseNo. Come faccio a sbarazzarmi di questa linea?

risposta

18

Cambia il loop per togliere gli spazi bianchi dalla parte superiore e inferiore della uscita (avviso extra "-" al ciclo for vicino):

{% for key, value in querystring.items() -%} 
     {{ key }}: '{{ value }}' 
{%- endfor %} 

Nel mio test (utilizzando https://github.com/abourguignon/jinja2-live-parser), il "- "deve venire dopo il primo {%, non prima dell'ultimo per ottenere ciò che stai chiedendo.

Documenti: http://jinja.pocoo.org/docs/dev/templates/#whitespace-control

+0

Sì, hai ragione. La prefinizione di '-' invece di accodare preserva il rientro e non rovina gli spazi nella riga successiva. – alecxe

+0

Esatto, non ricordavo questo dettaglio finché non ci ho giocato di nuovo. – tknickman

+4

Per me, questo mette tutta la chiave: coppie di valori su una singola riga. Non capisco perché questa risposta è stata accettata. – Honza

6

Penso che ci si possa sbarazzare utilizzando la funzione whitespace control. Quindi modifico il blocco endfor a {% endfor -%}

Vedi se lo fa!

2

ho trovato un modo per risolvere questo 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": mantenere l'avanzamento riga, rimuovere le righe vuote finali.
  • >-, |=: "strip": rimuove l'avanzamento riga, rimuove le righe vuote finali.
  • >+, |+: "mantieni": mantieni l'avanzamento della riga, continua a trascinare le righe vuote.

Thx postale Steve Bennett s': In YAML, how do I break a string over multiple lines?