Jinja2 的新人,我很喜欢玩列表的地图功能。所以我的目的是使用map过滤器来格式化python列表。我读过 Jinja2 文档,其中映射过滤器可用于 “对对象序列应用过滤器”。但当在 Jinja2 模板中的地图过滤器中使用时,我没有找到一种明确的方法来将参数传递给格式过滤器
示例: 蟒蛇数据:
colors = [ 'blue', 'red', 'green']
Jinja2 模板(只需将 python 列表重新格式化为方案样式) 想要的结果是
colors=(list "blue" "red" "green")
所以我从以下模板行开始,但在哪里放置格式参数并不明显
'"%s"'
,地图的第一个参数只是过滤器名称...
colors=(list {{ colors | map('format') | join(" ")}})
我读到了一些解决方法
{% for color in colors %} "{{color}}" {% endfor %}
但我只需要知道我是否错过了使用地图和格式过滤器执行此操作的某些操作?
提前感谢您的回答 问候
作为信息,我使用 python 3.6.3 和 Jinja2 3.0.1
它没有回答如何使用
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().