Flask 使用Jinja2创建csv文件
我正在使用Flask,我想使用Jinja2模板生成一个csv文件。根据Jinja2文件 Jinja模板只是一个文本文件。Jinja可以生成任何基于文本的格式(HTML、XML、CSV、LaTeX等)。Jinja模板不需要特定的扩展名:.html、.xml或任何其他扩展名都可以 问题是Jinja2非常擅长插入空格和换行符,这会破坏csv输出,csv输出应该是一个记录文件,每条记录都是逗号分隔的值列表 我需要使用Jinja2,而不是csv模块,因为我需要的所有数据都已经存储在一个设计用于向Jinja2提供数据的数据对象中(我通常生成HTML,但有时生成JSON,现在我要生成csv) 这是我的模板,请注意,dp是一个“数据页”对象,包含标题和值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
{% 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 %}