使用jinja2创建表

时间:2017-06-08 20:39:50

标签: python jinja2 templating-engine

我正在尝试使用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模板,具体取决于参数?

1 个答案:

答案 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