报告自动化生成

6. 报告内容生成

2018-07-26  本文已影响20人  数据成长之路

知识基础

学习目标

这里我们使用jinja2模板来直接生成html格式的报告,使用html+css规定格式,使用jinja2渲染内容

jinja2模板

首先使用html常用的头部(head):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
</head>

然后对各个部分内容的格式进行规定:

<style>
/*规定富文本部分的宽度*/
.rich-text {max-width:960px} 
/*规定表格各个单元的格式
*/
table tr td { border:1px solid #000000;padding-right: 0.5em;padding-left: 0.5em;font-size:0.9em}
table{margin: auto; text-align:center; border-collapse: collapse}
th{border:1px solid #000000; padding-right: 0.5em;padding-left: 0.5em}
/*文本居中*/
div{text-align: center}
/*各个段落的字号和段落格式*/
h1{font-size: 1.4em;}
.subtitle {font-size: 1.33em;text-align: right;}
h2{font-size: 1.2em;}
h3{font-size: 1em;}
div img{width:34.252em;height: auto;display:inline-block;}
table img{max-height: 1cm}
table + div{margin: 1.5em 0em 0em 0em;}
p{text-align: left;}
</style>

逐个生成报告的各个组成章节

<body>
<section class = "rich-text">
<h1>{{ document.title }}</h1>
<p>{{ document.foreword }}</p>

{% for chapter in document.chapters %}
    <h2>{{ chapter.title }}</h2>
    {%- if chapter.foreword -%}
    <p>{{ chapter.foreword }}</p>
    {%- endif -%}
    <p>{{ chapter.content }}</p>
    {% if not chapter.table is none %}
    {% set table = chapter.table %}
        <table>
            <tr class='chapter_table'>
            {% for column in table.columns %}
            <th>{{column}}</th>
            {% endfor %}
            </tr>
            {% for index in table.index %}
                <tr>
                {% for column in table.columns %}
                    <td>{{ table[column][index] }}</td>
                {% endfor %}
                </tr>
            {% endfor %}
        </table>
    {% endif %}
    {% for subchapter in chapter.chapters %}
        {% if not subchapter.title is none %}
            <h3>{{ subchapter.title }}</h3>
            <p>{{ subchapter.foreword }}</p>
            {% if not subchapter.table is none %}
                {% set table = subchapter.table %}
                <table>
                    <tr class='chapter_table'>
                    {% for column in table.columns %}
                    <th>{{column}}</th>
                    {% endfor %}
                    </tr>
                    {% for index in table.index %}
                        <tr>
                        {% for column in table.columns %}
                            <td>{{ table[column][index] }}</td>
                        {% endfor %}
                        </tr>
                    {% endfor %}
                </table>
            {% endif %}

            {% if not subchapter.image is none %}
                {% set image = subchapter.image %}
                <div><img src="{{ image }}"></div>
            {% endif %}

            <p>{{ subchapter.content }}</p>
        {% endif %}
    {% endfor %}

{% endfor %}
</section>
</body>
</html>
%run "3. 报告的内容添加.ipynb"
chapter0
--chapter0_subchapter0
--chapter0_subchapter1
--chapter0_subchapter2
--chapter0_subchapter3
chapter1
--chapter1_subchapter0
--chapter1_subchapter1
--chapter1_subchapter2
--chapter1_subchapter3
chapter2
--chapter2_subchapter0
--chapter2_subchapter1
--chapter2_subchapter2
--chapter2_subchapter3
chapter3
--chapter3_subchapter0
--chapter3_subchapter1
--chapter3_subchapter2
--chapter3_subchapter3
chapter4
--chapter4_subchapter0
--chapter4_subchapter1
--chapter4_subchapter2
--chapter4_subchapter3
title : 2018年5月21日-2018年5月27日亚马逊美站   Pet Supplies   品类爆款分析
-chapter0
--title : 一、总体情况
-chapter1
--title : 二、Best Seller榜单分析:

---chapter1_subchapter0
----title : 1.价格分布

---chapter1_subchapter1
----title : 2.评论量分布

---chapter1_subchapter2
----title : 3.商品排行

---chapter1_subchapter3
----title : 4.品牌排行
-chapter2
--title : 三、Hot New Releases榜单分析:

---chapter2_subchapter0
----title : 1.价格分布

---chapter2_subchapter1
----title : 2.评论量分布

---chapter2_subchapter2
----title : 3.商品排行

---chapter2_subchapter3
----title : 4.品牌排行
-chapter3
--title : 四、Movers & Shakers榜单分析:

---chapter3_subchapter0
----title : 1.价格分布

---chapter3_subchapter1
----title : 2.评论量分布

---chapter3_subchapter2
----title : 3.商品排行

---chapter3_subchapter3
----title : 4.品牌排行
-chapter4
--title :   
from jinja2 import Template
html_name = 'report.html'
with open('./template.html') as f:
    templ = f.read()
t = Template(templ)
html = t.render(document=document)
with open(html_name,'w') as f:
    f.write(html)

上一篇下一篇

猜你喜欢

热点阅读