我正在使用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 }}
Run Code Online (Sandbox Code Playgroud)
给我输出:
- 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
Run Code Online (Sandbox Code Playgroud)
在houseNo之后还有一个不需要的空白行.我如何摆脱这条线?
tkn*_*man 51
更改循环以从输出的顶部和底部去除空白区域(注意for循环关闭时的额外" - "):
{% for key, value in querystring.items() -%}
{{ key }}: '{{ value }}'
{%- endfor %}
Run Code Online (Sandbox Code Playgroud)
在我的测试中(使用https://github.com/abourguignon/jinja2-live-parser)," - "必须在第一个之后{%,而不是在最后一个之前实现你所要求的.
文件:http://jinja.pocoo.org/docs/dev/templates/#whitespace-control
小智 9
接受的答案只是解决方案的一半,因为它删除了所有换行符。
您可以通过首先删除所有换行符(在 for 循环中使用减号 at-%}和{%-),然后在正确的位置插入所需的换行符(使用条件loop.last)来避免尾随换行符。
以下模板将字典 d 呈现为 JSON 文本:
{
{% for key, value in d.items() -%}
"{{ key }}": "{{ value }}"{{ ",
" if not loop.last }}
{%- endfor %}
}
Run Code Online (Sandbox Code Playgroud)
对于d = {'a':'1', 'b':'2'},模板呈现为
{
"a": "1",
"b": "2"
}
Run Code Online (Sandbox Code Playgroud)
对于那些使用Flask到达这里的人,这些行为我提供了窍门:
app = Flask(__name__)
app.jinja_env.lstrip_blocks = True
app.jinja_env.trim_blocks = True
Run Code Online (Sandbox Code Playgroud)
我找到了解决此问题的方法:
- 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 }}
Run Code Online (Sandbox Code Playgroud)
>,|:“ clip”:保持换行,删除尾随的空白行。>-,|=:“ strip”:删除换行,删除尾随的空白行。>+,|+:“ keep”:保持换行,尾随空白行。Thx Steve Bennett的帖子: 在YAML中,如何将字符串拆分成多行?