在没有unicode字符的有序结构中呈现列表

时间:2017-12-06 11:13:08

标签: python templates unicode ansible jinja2

我有一个如下所示的列表:

[(u'Element1', u'Description1', u'Status1), (u'newElement2', u'newDescription2', u'newStatus2), (u'nextElement3', u'nextDescription3', u'nextStatus3), (u'anotherElement4', u'anotherDescription4', u'anotherStatus4)] 

我有一个ansible playbook,它使用jinja2模板将列表呈现为文本文件。模板文件如下所示:

{% for item in description | batch(3, ' ') %}
{% for el in item %}
{{ el }}
{% endfor %}
{% endfor %}

但是这会使文本文件看起来像这样:

[u'Element1', u'Description1', u'Status1]
[u'newElement2', u'newDescription2', u'newStatus2]
[u'nextElement3', u'nextDescription3', u'nextStatus3]
[u'anotherElement4', u'anotherDescription4', u'anotherStatus4]

我希望报告看起来像这样:

Element1           Description1           Status1
newElement2        nextDescription2       newStatus2
nextElement3       nextDescription3       nextStatus3
anotherElement4    anotherDescription4    anotherDescription4

有没有办法删除unicode字符并以这种方式呈现列表?

2 个答案:

答案 0 :(得分:0)

你可以尝试

{% for el in item %}
    {% for e in el %}
        {{ e }}
    {% endfor %}
{% endfor %}

如果您希望能够更改格式

,请使用html表格

答案 1 :(得分:0)

例如:

{% for row in description %}
{% for cell in row %}
{{ "%-22s"|format(cell) }} 
{%- endfor %}

{% endfor %}

收率:

Element1              Description1          Status1
newElement2           newDescription2       newStatus2
nextElement3          nextDescription3      nextStatus3
anotherElement4       anotherDescription4   anotherStatus4

但要获得动态填充 - 取决于列中元素的最大长度 - 看起来像一个更复杂的任务:{{ "%-22s"|format(cell) }}可以替换为{{ "{0}".format(cell).ljust(width) }} width可以是一个变量,但可能需要另一个循环来收集长度。