python excel模板引擎_Python模板引擎Jinja2(一)

本文介绍了Python模板引擎Jinja2的基本概念、优点和简单使用方法。通过一个实例展示了如何创建模板文件、渲染数据并输出HTML,以及Jinja2中的基本语法如注释、变量取值和控制结构。后续将探讨更多Jinja2的功能,如运算符、转义方法、测试器等。
摘要由CSDN通过智能技术生成

前言

来啦老铁!

笔者近期在工作中遇到将测试数据可视化的需求,且在Python语言背景下,当时借用的是团队既有经验,即:

模板引擎技术

而模板引擎使用:Jinja2

看过笔者的Spring Boot全家桶系列文章的同学一定不会陌生,我们曾在文章Spring Boot视图技术中,一起学习了java体系下的视图技术(模板引擎技术),咱们今天也来学习学习Python体系下的模板引擎技术吧!

学习路径

常见的Python模板引擎有哪些?

Jinja2简介;

Jinja2入门使用;

Jinja2的基础知识点;

1. 常见的Python模板引擎有哪些?

首先我们来看看网上的大佬们都玩过哪些Python的模板引擎吧:

pyTemplate

pyTenjin

Tornado.template

PyJade

Genshi

Django

Smarty

Mako

Jinja2

等。

这么多?笔者只听过Django和Jinja2,孤陋寡闻了,有兴趣的朋友请移步百度~

2. Jinja2简介;

1). Jinja2介绍:

jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。

2). Jinja2的优点:

相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等;

相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑;

相对于Django模板,jinja2性能更好;

Jinja2模板的可读性很棒。

3. Jinja2入门使用;

话不多说,咱直接开整,代码仓库:

我们直接开始撸一个简单的渲染例子,当然,在使用Jinja2前,需要安装Jinja2哟:

pip3 install jinja2

1). 创建模板文件;

模板文件即html文件,我们在项目内创建一个python包,如resources包,在resources包内创建一个模板文件夹templates,用于存放Jinja模板,最后在templates文件夹下创建一模板文件如:jinja2_demo_1.html;

2). 编写模板文件;

在jinja2_demo_1.html文件中,编写简单的Jinja模板,代码如下:

Jinja2-demo-1

INDEXSTATUSMESSAGECREATED_WHEN

{ {index}}{ {status}}{ {message}}{ {created_when}}

我们会发现,模板中没有写死的数据,而是以{ {}}符号包裹变量,如果这时候直接浏览器打开resources/templates/jinja2_demo_1.html文件,效果为:

浏览器打开模板文件

没错,就是个模板而已,没有真实值。接下来我们就来将{ {}}符号包裹变量变成我们想展示的值吧!

3). 创建模板渲染逻辑处理类;

在项目根目录下创建一个python包,如utils包,在包内创建一个python类,如reportUtil.py,类中编写一简单的模板渲染逻辑,如下:

#!/usr/local/bin/python3

# -*- coding:utf-8 -*-

__author__ = "diren"

__date__ = "2021-01-03 15:50"

import os

import time

from jinja2 import Environment, PackageLoader

class ReportUtil:

def __init__(self):

pass

def create_jinja2_demo_1_html(self):

index = 1

status = "成功"

message = "这是一个测试文本"

created_when = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

env = Environment(loader=PackageLoader('resources', 'templates'))

template_name = "jinja2_demo_1.html"

template = env.get_template(template_name)

html = template.render(index=index, message=message, created_when=created_when, status=status)

current_dir = os.getcwd()

output_dir = os.path.join(current_dir, "../resources/output/")

if not os.path.exists(output_dir):

os.mkdir(output_dir)

os.chdir(output_dir)

fo = open(template_name, "w")

fo.writelines(html)

fo.close()

os.chdir(current_dir)

print(f"create {template_name}:", "完成")

if __name__ == "__main__":

ReportUtil().create_jinja2_demo_1_html()

这里稍微讲解一下我们的目的:

我们希望通过reportUtil.py,将一组数据渲染进resources/templates/jinja2_demo_1.html文件中表格的第一行;

渲染的数据为:

index = 1

status = "成功"

message = "这是一个测试文本"

created_when = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

渲染后的文件存储于resources/output/jinja2_demo_1.html中,

渲染预期为一个简单表格;

4). 项目整体结构;

项目整体结构

5). 演示;

运行reportUtil.py,我们能看到resources包下生成了一个output文件夹,output文件夹下有一个html文件:jinja2_demo_1.html,该文件就是我们在reportUtil.py渲染出来的静态html文件:

渲染html

浏览器打开resources/output/jinja2_demo_1.html文件:

浏览器访问html

嗯,没错,原来{ {}}符号包裹的变量,均变成我们reportUtil.py代码中想渲染的真实值了,渲染演示成功!是不是很简单呀!

上述,演示了一个非常简单的Jinja2使用方法,接下来我们一起来边学习Jinja2的常用功能,边码代码、边演示、边学习吧!

4. Jinja2的基础知识点;

这里罗列一下基础知识点:

基本语法;

运算符;

转义方法;

测试器;

如何在模版页面中引入静态文件?

过滤器;

宏;

模板继承;

1). 基本语法;

注释 {#...#}

例如:{#这是一个注释#},这一行代码是不会被渲染、处理的,起注释作用;

变量取值 { {...}}

如上面的例子, { {}}是占位符,Jinja2渲染时会将这些占位符替换成真实值。它支持python中的所有数据类型,如字符串、字典、列表等。

控制结构 {%

明白了,你想要一个能够通过类似模板引擎的语法方式进行参数填充的 Excel 模板引擎。这样的话,你可以考虑使用 Python 的 openpyxl 库,它可以读取、修改和生成 Excel 文件。然后,你可以使用 jinja2 或其他模板引擎来生成要填充的数据。 具体步骤如下: 1. 安装 openpyxl 库和 jinja2 库 ``` pip install openpyxl pip install jinja2 ``` 2. 创建 Excel 模板文件,并在其中添加需要填充的变量名。例如,你可以在一个单元格中添加 "{{ 变量名 }}"。 3. 使用 openpyxl 库读取 Excel 模板文件,并解析其中的变量名。 ```python from openpyxl import load_workbook from jinja2 import Template # 加载 Excel 模板文件 wb = load_workbook('template.xlsx') # 获取要填充数据的工作表 sheet = wb.active # 获取模板中的变量名 variables = [] for row in sheet.iter_rows(): for cell in row: if isinstance(cell.value, str) and '{{' in cell.value and '}}' in cell.value: variables.append(cell.value.strip('{}')) ``` 4. 准备要填充的数据,并使用 jinja2 库生成填充后的数据。 ```python # 准备要填充的数据 data = { 'name': '张三', 'age': 20, 'gender': '男' } # 使用 jinja2 库生成填充后的数据 template = Template(sheet.cell(row=1, column=1).value) rendered_data = template.render(data) ``` 5. 将填充后的数据写入 Excel 文件中。 ```python # 将填充后的数据写入 Excel 文件中 sheet.cell(row=1, column=1).value = rendered_data wb.save('output.xlsx') ``` 这样,你就可以通过类似模板引擎的语法方式,在 Excel 模板中预先写好需要填充的变量名,然后使用 Python 的 openpyxl 库和 jinja2 库,将数据填充到 Excel 模板中,生成新的 Excel 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值