【python】jinja2模板引擎生成HTML

jinja2模板引擎生成HTML

0 背景
在之前的文章中,我介绍过《Python之生成HTML文件》以及《HTML零基础入门教程(详细)》,手动生成了html文件,在实际使用的时候,我们完全可以套用模板文件来生成,免去了一条一条手写的麻烦。关于python的模板引擎有很多种类,本文选择的是比较常用的一种jinja2,接下来对该引擎的使用做一个介绍。

1 jinja2介绍
Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全,关于jinja2的文档介绍。

安装方法

sudo pip install jinja2
2 模板文件
接下来制作一个模板文件template.html,直接给代码(超链接形式)

<meta http-equiv="Content-Type"content="text/html;charset=utf-8">
<html align='left'>
<h1>巡检报告</h1>
    <body>
    <h2>报告综述</h2>   
    <p>巡检地点 : 机房&nbsp;&nbsp;开始时间 : {{start_time}}&nbsp;&nbsp;结束时间 : {{stop_time}}  </p>
    <p>检测结果 : ***&nbsp;&nbsp;其它信息:***</p>
    <h2>详细信息</h2>  
    <table border="1" width = "40%" cellspacing='0' cellpadding='0' align='left'>
    <tr>        
        <th>机柜号</th>
        <th>检测时间</th>
        <th>检测结果</th>
        <th>详细信息</th>
        <th>图片路径</th>
    </tr>
 
    {% for item in body %}
    <tr align='center'>
        <td>{{ item.cabID }}</td>
        <td>{{ item.shijian }}</td>
        <td>{{ item.final_result }}</td>
        <td>{{ item.info }}</td>
        <td><a href={{item.image_path}}>图片</a> </td>
    </tr>
    {% endfor%}
    </table>
    </body>
</html>

3 测试方法
我们写一个脚本程序,用来调用上述模板,生成指定的结果文件result.html

from jinja2 import Environment, FileSystemLoader 
 
def generate_html( body, starttime, stoptime):
    env = Environment(loader=FileSystemLoader('./'))
    template = env.get_template('template.html')     
    with open("result.html",'w+') as fout:   
        html_content = template.render(start_time=starttime , 
                                        stop_time=stoptime,
                                        body=body)
        fout.write(html_content)
 
if __name__ == "__main__":
    body = []
    result = {'cabID':1, 'shijian':2019, 'final_result':"正常", 'info':"无",
                'image_path':"test.jpg"}
    body.append(result)            
    generate_html(body, 2019, 2019) 


运行后即可生成result.html文件如下

-------------------------2019/9/9更新----------------------------------------

上述使用的是超链接的形式进行图片显示,实际使用时不太方便,接下来使用锚点的方法来将图片和结果显示在一个页面,代码如下

<meta http-equiv="Content-Type"content="text/html;charset=utf-8">
<html align='left'>
<h1>巡检报告</h1>
    <body>
    <h2>报告综述</h2>   
    <p>巡检地点 : 机房&nbsp;&nbsp;开始时间 : {{start_time}}&nbsp;&nbsp;结束时间 : {{stop_time}}  </p>
    <p>检测结果 : ***&nbsp;&nbsp;其它信息:***</p>
    <h2>详细信息</h2>  
    <table border="1" width = "40%" cellspacing='0' cellpadding='0'>
    <tr>        
        <th>机柜号</th>
        <th>检测时间</th>
        <th>检测结果</th>
        <th>详细信息</th>
        <th>图片路径</th>
    </tr>
 
    {% for item in body %}
    <tr align='center'>
        <td>{{ item.cabID }}</td>
        <td>{{ item.shijian }}</td>
        <td>{{ item.final_result }}</td>
        <td>{{ item.info }}</td>
        <td><a href="#{{ item.shijian }}">{{ item.shijian }}</a></td>
    </tr>
    {% endfor%}
    </table>
    <h2>图片显示</h2> 
    {% for item in body %}
        <p>{{ item.shijian }}</p> 
        <a name="{{ item.shijian }}"> <img src="{{ item.image_path }}" width="640"></a>
        <br>
    {% endfor%}
    </body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章