我不太确定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”中的元素并创建输出文件吗?
答案 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>