2016-04-26 112 views
12

我使用jinja 2輸出yaml文件,但似乎無法擺脫尾隨換行符和for循環的結束。例如,下面的jinja2如何刪除拖尾換行

- 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 

用的HouseNo後附加不必要的空行。我如何擺脫這條線?

回答

18

更改您的循環剝離從輸出的頂部和底部的空格(注意額外的「 - 」在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

+0

是啊,你是對的。預先添加'-'而不是追加保留縮進,並且不會擰緊下一行中的空格。 – alecxe

+0

正確,我不記得這個細節,直到我再次玩弄它。 – tknickman

+4

對我來說,這將所有的關鍵:值對放在一行上。我不明白爲什麼這個答案被接受。 – Honza

6

我認爲你可以使用whitespace control功能擺脫它。因此,我會修改endfor區塊爲{% endfor -%}

看看是否可以!

2

我找到了一種方法來解決這個問題:

- 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 }} 
  • >|: 「夾」:保持換行,取出後的空行。
  • >-|=:「strip」:刪除換行符,刪除尾隨空行。
  • >+|+:「保持」:保持換行,保留空行。

THX 史蒂夫·貝內特的帖子: In YAML, how do I break a string over multiple lines?