2016-04-26 14 views
12

Ich benutze Jinja 2, um eine Yaml-Datei auszugeben, kann aber nicht scheinen, eine nachlaufende Newline und das Ende einer for-Schleife loszuwerden. ZB die folgendenjinja2, wie nachlaufende Zeilenumbrüche zu entfernen

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

gibt mir die Ausgabe:

- 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 

Mit einer zusätzlichen unerwünschten Leerzeile nach Hausnr. Wie werde ich diese Linie los?

Antwort

18

ändern Schleife weißen Flächen von der Ober- und Unterseite des Ausgangs abzustreifen (extra Hinweis "-" in der for-Schleife schließen):

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

In meinen Tests (unter Verwendung von https://github.com/abourguignon/jinja2-live-parser), die „- "Muss nach dem ersten {% kommen, nicht vor dem letzten, um das zu erreichen, wonach du verlangst.

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

+0

Ja, du hast recht. Das Anhängen von '-' anstelle des Anhängens behält den Einzug bei und mischt die Leerzeichen in der nächsten Zeile nicht. – alecxe

+0

Richtig, ich erinnerte mich nicht an dieses Detail, bis ich wieder damit herumspielte. – tknickman

+4

Für mich setzt dies alle Schlüssel: Wert-Paare in einer einzigen Zeile. Ich verstehe nicht, warum diese Antwort akzeptiert wurde. – Honza

6

Ich denke, Sie können es mit der whitespace control Funktion loswerden. So würde ich den endfor Block zu {% endfor -%}

ändern, ob es das tut!

2

fand ich einen Weg, um dieses Problem zu lösen:

- 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": den Zeilenvorschub hält, entfernen Sie die Hinterleerzeilen.
  • >-, |=: "Streifen": Entfernen Sie den Zeilenvorschub, entfernen Sie die nachfolgenden Leerzeilen.
  • >+, |+: "keep": Halten Sie den Zeilenvorschub, behalten Sie leere Zeilen vor.

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

Verwandte Themen