Flask 使用Jinja2创建csv文件

Flask 使用Jinja2创建csv文件,flask,jinja2,Flask,Jinja2,我正在使用Flask,我想使用Jinja2模板生成一个csv文件。根据Jinja2文件 Jinja模板只是一个文本文件。Jinja可以生成任何基于文本的格式(HTML、XML、CSV、LaTeX等)。Jinja模板不需要特定的扩展名:.html、.xml或任何其他扩展名都可以 问题是Jinja2非常擅长插入空格和换行符,这会破坏csv输出,csv输出应该是一个记录文件,每条记录都是逗号分隔的值列表 我需要使用Jinja2,而不是csv模块,因为我需要的所有数据都已经存储在一个设计用于向Jinja

我正在使用Flask,我想使用Jinja2模板生成一个csv文件。根据Jinja2文件

Jinja模板只是一个文本文件。Jinja可以生成任何基于文本的格式(HTML、XML、CSV、LaTeX等)。Jinja模板不需要特定的扩展名:.html、.xml或任何其他扩展名都可以

问题是Jinja2非常擅长插入空格和换行符,这会破坏csv输出,csv输出应该是一个记录文件,每条记录都是逗号分隔的值列表

我需要使用Jinja2,而不是csv模块,因为我需要的所有数据都已经存储在一个设计用于向Jinja2提供数据的数据对象中(我通常生成HTML,但有时生成JSON,现在我要生成csv)

这是我的模板,请注意,dp是一个“数据页”对象,包含标题和值

{% set g = namespace(comm0 = '', comma = '') %}

{# Header #}
{% for ix in range(dp.field_count) -%}

    {{ g.comm0 }}
    "{{ dp.fields[ix].label }}"
    {% set g.comm0 = ', ' %}

{%- endfor %}

{# Rows #}
{% for record in dp.records -%}

    {% set g.comma = '' %}

    {% for ix in range(dp.field_count) -%}

        {{ g.comma }}
        "{{ record.row[ix].value }}"
        {% set g.comma = ', ' %}

    {%- endfor %}

{%- endfor %}
下面是输出的样子(已经通过使用-符号消除了一些空白)

下面是csv应该是什么样子

"Staff Type" ,  "Item" ,  "Billable?" ,  "Description" , "Hourly Rate" , "Date Changed", "Tag"
"AC", "", "-1", "Associate Consultant",  "20", "", ""
"ACS", "", "-1", "Consultant", "29", "", ""
"ADMIN", "", "0", "Administration", "20", "", ""

那么,我该如何消除记录中的换行符,并在每条记录的末尾放一个换行符,并去掉剩余的不必要的空白。

事实证明,我非常需要将那些
-
符号放在所有地方。该模板通过消除所有内容之间的空白(我想要换行的地方除外)来工作并提供csv

{% set g = namespace(comm0 = '', comma = '') -%}

{# Header #}
{%- for ix in range(dp.field_count) -%}

    {{- g.comm0 -}}
    "{{- dp.fields[ix].label -}}"
    {%- set g.comm0 = ', ' -%}

{%- endfor %}

{# Rows #}
{%- for record in dp.records -%}
    {%- set g.comma = '' -%}
    {%- for ix in range(dp.field_count) -%}

        {{- g.comma -}}
        "{{- record.row[ix].value -}}"
        {%- set g.comma = ', ' -%}

    {%- endfor %}
{% endfor %}
参考

{% set g = namespace(comm0 = '', comma = '') -%}

{# Header #}
{%- for ix in range(dp.field_count) -%}

    {{- g.comm0 -}}
    "{{- dp.fields[ix].label -}}"
    {%- set g.comm0 = ', ' -%}

{%- endfor %}

{# Rows #}
{%- for record in dp.records -%}
    {%- set g.comma = '' -%}
    {%- for ix in range(dp.field_count) -%}

        {{- g.comma -}}
        "{{- record.row[ix].value -}}"
        {%- set g.comma = ', ' -%}

    {%- endfor %}
{% endfor %}