6. 报告内容生成
2018-07-26 本文已影响20人
数据成长之路
知识基础
- 了解Python类的基础
- 了解jinja2模板
- 了解HTML和CSS进行网页页面设置
学习目标
- 使用已经添加好内容的 document 生成html文档
这里我们使用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)