【python】使用字符串格式化渲染html

背景

被分配到一个小任务,即编写一个发送日报邮件的接口,且要求日报以 HTML 形式展示。

在查询和分析方面无需赘言,在渲染页面时却遭遇了一些小难题。

鉴于此任务仅仅是简单的发送邮件操作,专门去配置模板引擎或者采用前后端分离的方式显然不太必要。于是,我决定通过字符串格式化来实现。先编写一个 HTML 模板,在需要填充数据的位置用占位符占位,然后利用字符串格式化来渲染 HTML 。

然而,由于 HTML 模板中存在 CSS 样式,其"{}"语法与 Python 格式化字符串的语法产生了冲突。

解决方案

用"{{}}"转义

将 CSS 中的"{}"全部替换为"{{}}",这种方法是可行的。在 Python 进行字符串格式化时,"{{}}"中的"{}"及其他内容会被当作普通字符串处理,不会被格式化。

但当我开启 PyCharm 的代码格式化功能时,原本的"{{}}"会被转换为"{\n{ }\n}",因此使用起来较为麻烦,甚至不太能用。

将 HTML 模板拆分成"header" - "body" - "footer" 三部分

如此一来,只需对"body"部分进行格式化,其余部分保持不变。然后通过字符串拼接的方式组合成完整的 HTML 页面。

采用这种方式,就无需担忧 CSS 语法与字符串格式化语法的冲突。并且,如果存在 JavaScript 脚本,也可以写在"footer"部分。这样,可能出现"{}"符号的地方就都被成功分离了。

接着,针对"body"部分使用关键字参数进行字符串格式化,如此一来,看起来也更为直观。

比如像这样:

html 复制代码
<div class="row">                                            
    <div class="cell">                                       
        <div class="cellname">昨日交易订单数(单)</div>               
        <div class="celldata">{total_order}</div>            
    </div>                                                   
    <div class="cell">                                       
        <div class="cellname">昨日交易金额(元)</div>                
        <div class="celldata">{total_transacted_amount}</div>
    </div>                                                   
    <div class="cell">                                       
        <div class="cellname">昨日收益(元)</div>                  
        <div class="celldata">{total_profit}</div>           
    </div>                                                   
                                                             
</div>                                                       

然后调用字符串的format方法,传入关键字参数即可。

相关推荐
eqwaak024 分钟前
数据预处理与可视化流水线:Pandas Profiling + Altair 实战指南
开发语言·python·信息可视化·数据挖掘·数据分析·pandas
能不能别报错31 分钟前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
初圣魔门首席弟子36 分钟前
C++ STL 向量(vector)学习笔记:从基础到实战
c++·笔记·学习
iconball1 小时前
个人用云计算学习笔记 --20 (Nginx 服务器)
linux·运维·笔记·学习·云计算
心态特好1 小时前
详解WebSocket及其妙用
java·python·websocket·网络协议
生物小卡拉2 小时前
R脚本--表达矩阵与特征矩阵相关性分析
笔记·学习·机器学习
能不能别报错2 小时前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
报错小能手2 小时前
linux学习笔记(19)进程间通讯——消息队列
linux·笔记·学习
进击的圆儿2 小时前
【学习笔记05】C++11新特性学习总结(下)
c++·笔记·学习
dlraba8022 小时前
用 Python+OpenCV 实现实时文档扫描:从摄像头捕捉到透视矫正全流程
开发语言·python·opencv