6. 报告内容生成

作者: 数据成长之路 | 来源:发表于2018-07-26 16:21 被阅读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)
    
    
    

    相关文章

      网友评论

        本文标题:6. 报告内容生成

        本文链接:https://www.haomeiwen.com/subject/fcbbmftx.html