web-dev-qa-db-ja.com

jinja2末尾の改行を削除する方法

私はjinja 2を使用してyamlファイルを出力していますが、末尾の改行とforループの終わりを取り除くことができないようです。例えば、以下

 - 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の後に追加の不要な空白行があります。この行を削除するにはどうすればよいですか?

33
Yunti

ループを変更して、出力の上部と下部から空白を削除します(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

44
tknickman

whitespace control 機能を使用してそれを取り除くことができると思います。したがって、endforブロックを{% endfor -%}に変更します

それがそれを行うかどうかを確認してください!

10
Scratch'N'Purr

この問題を解決する方法を見つけました。

- 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":改行を削除し、末尾の空白行を削除します。
  • >+|+: "keep":改行を保持し、末尾の空白行を保持します。

ThxSteve Bennettの投稿: YAMLでは、文字列を複数行に分割するにはどうすればよいですか?

5
shuaiming

Flaskここに到着した人を使用している人のために、これらの行は私のためにトリックをしました:

app = Flask(__name__)
app.jinja_env.lstrip_blocks = True
app.jinja_env.trim_blocks = True
4
MarredCheese

以下の行のレンダリングを抑制できます。

<% for ... %>
<% endfor %>
<% if ... %>
<% endif %>

jinja2環境でtrim_blocks = Trueおよびlstrip_blocks = Trueを設定します。次の例を参照してください their docs からの情報

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))
0
spacether