使用jinja生成CSV文件

时间:2017-03-03 15:40:02

标签: python jinja2

我不太确定Jinja是否适合这项工作,但看到它在我们环境的其他地方使用过,我想我会尝试将其作为练习来熟悉它。

我有一个列表a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

我需要在其中写入值以创建CSV文件。除了。

中的值外,CSV文件中的所有值都将被修复

所以我想模板文件看起来像这样(我知道这不是Jinja2语法):

a[0], 'something',
a[1], 'else',
a[2], 'but',
.
.
a[5], 'repeated statement',
a[6], 'repeated statement',
.
a[8], 'here endeth the lesson',

我可以像在Python中一样使用索引访问“a”中的元素并创建输出文件吗?

1 个答案:

答案 0 :(得分:1)

我不确定你的最终目标到底是什么,但jinja更像是一种用于生成视图的模板工具,而不是某种文件。与@Marat所说的一样,您可以使用csv模块创建csv文件。

但是,如果您的真正目的是使用jinja创建某种类型的表视图,其中列表中的值填充在表中,那么您当然可以在jinja中执行此操作。

在HTML视图中,您可以执行以下操作:

<table>
    <thead>
        <tr>
            <th>List[idx]</th>
            <th>Value</th>
        </tr>
    <thead>
    <tbody>
        {%- for item in a -%}
        <tr>
            <td>a[{{ loop.index - 1 }}]</td>
            <td>{{ item }}</td>
        </tr>
        {%- endfor -%}
    </tbody>
</table>

当然,您必须将a列表作为上下文变量传递给您的jinja才能使其正常工作。我假设您正在使用Flask作为您的框架:

@app.route('/your-route')
def your_route_function():
    ...  # your code for creating the 'a' list
    ...  # more code
    return render_template('yourhtml.html', a=a)

现在,如果您想按索引访问列表,那也是可能的。您必须使用jinja&#39; length过滤器来确定列表的长度:

<table>
    <thead>
        <tr>
            <th>List[idx]</th>
            <th>Value</th>
        </tr>
    <thead>
    <tbody>
        {%- for idx in range(a|length) -%}
        <tr>
            <td>a[{{ idx }}]</td>
            <td>{{ a[idx] }}</td>
        </tr>
        {%- endfor -%}
    </tbody>
</table>