我正在尝试使用jinja2创建一个(乳胶)表。我定义了一个宏来帮助我创建表:
{% macro table(header, rows, columns) %}
\begin{tabular}{(formatting, later)}
{{ row(header) }}
{% for row in rows %}
{% for column in columns %}
{{ caller(row, column) }} & % *here*
{% endfor %} \\
{% endfor %}
\end{tabular}
{% endmacro %}
我可以使用这样的模板:
{% call(row, column) table.table(header, rows, columns) %}
Content at row = {{row}}, column = {{column}}
{% endcall %}
我非常喜欢这些宏如何工作。但问题是,我希望通过join
符号来&
宏的结果,而不是 Content at row = 0, column = 0 &
Content at row = 0, column = 1 & \\
每排后都打一个牌子。基本上现在我有这个:
Content at row = 0, column = 0 &
Content at row = 0, column = 1 \\
我希望得到这个:
join
是否可以对宏结果使用过滤器?有没有其他方法来生成一个表,其中每个单元格是另一个jinja2模板,具体取决于参数?
答案 0 :(得分:1)
我不熟悉Jinja本身的join
功能。但它确实在你的循环中内置了索引。使用loop.last
,您可以确定更改输出符号的位置
{% macro table(header, rows, columns, ) %}
\begin{tabular}{(formatting, later)}
{{ row(header) }}
{% for row in rows %}
{% for column in columns %}
{{ caller(row, column) }} {% if loop.last %}\\{% else %}&{%endif%}
{% endfor %}
{% endfor %}
\end{tabular}
{% endmacro %}
以下是可用的其他loop
个变量的文档:http://jinja.pocoo.org/docs/2.9/templates/#for