Jinja2,使用带有格式过滤器的地图,有什么技巧?

问题描述 投票:0回答:1

Jinja2 的新人,我很喜欢玩列表的地图功能。所以我的目的是使用map过滤器来格式化python列表。我读过 Jinja2 文档,其中映射过滤器可用于 “对对象序列应用过滤器”。但当在 Jinja2 模板中的地图过滤器中使用时,我没有找到一种明确的方法来将参数传递给格式过滤器

示例: 蟒蛇数据:

colors = [ 'blue', 'red', 'green']

Jinja2 模板(只需将 python 列表重新格式化为方案样式) 想要的结果是

colors=(list "blue" "red" "green")

所以我从以下模板行开始,但在哪里放置格式参数并不明显

'"%s"'
,地图的第一个参数只是过滤器名称...

colors=(list {{ colors | map('format') | join(" ")}})

我读到了一些解决方法

  • 使用 ansible 过滤器 regexp-replace 来完成这项工作
  • Jinja2 模板中结构的其他用途

{% for color in colors %} "{{color}}" {% endfor %}

但我只需要知道我是否错过了使用地图和格式过滤器执行此操作的某些操作?

提前感谢您的回答 问候

作为信息,我使用 python 3.6.3 和 Jinja2 3.0.1

python templates jinja2
1个回答
0
投票

它没有回答如何使用

map
,但我会在不使用
map
的情况下使用
'" "'
中的
join
,并将字符串放入
" "
中。

import jinja2

e = jinja2.Environment()

colors = [ 'blue', 'red', 'green']

t = e.from_string('colors=(list "{{ colors | join(\'" "\')}}")')
result = t.render({'colors': colors})
print(result)

结果:

'colors=(list "blue" "red" "green")'

编辑:

如果我必须使用

map
那么我会在发送到模板之前使用它

import jinja2

e = jinja2.Environment()

colors = [ 'blue', 'red', 'green']

#colors = list(map('"{}"'.format, colors))
#print(colors)

colors = map('"{}"'.format, colors)

t = e.from_string('colors=(list {{ colors | join(" ")}})')
result = t.render({'colors': colors})
print(result)

甚至jinja2中的

format
文档也这么说

In most cases it should be more convenient and efficient to use   
the % operator or str.format().
© www.soinside.com 2019 - 2024. All rights reserved.