找回密码
 会员注册
查看: 20|回复: 0

Python系列Jinja2模板引擎

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-9-9 15:21:37 | 显示全部楼层 |阅读模式
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kwan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术,jvm,并发编程redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora等数据库系列:详细总结了常用数据库mysql技术点,以及工作中遇到的mysql问题等新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝✨✨欢迎订阅本专栏✨✨博客目录一.基本介绍1.Jinja2简介2.安装Jinja23.基本用法4.创建模板5.渲染模板6.高级特性二.需求实现1.需求描述2.代码实现一.基本介绍在现代软件开发中,模板引擎扮演着至关重要的角色,尤其是在Web开发领域。它们允许开发者将逻辑代码与用户界面分离,使得代码更加清晰、易于维护。在Python社区中,Jinja2是一个广泛使用的模板引擎,它提供了强大的功能来处理模板渲染。1.Jinja2简介Jinja2是一个用Python编写的模板引擎,它继承了Django模板语言的许多特性,同时加入了一些独特的功能。Jinja2支持继承、包含、宏等高级功能,使得模板的创建和管理变得更加灵活和强大。2.安装Jinja2安装Jinja2非常简单,你可以通过pip命令轻松安装:pipinstallJinja21安装完成后,你就可以在Python代码中使用Jinja2了。3.基本用法Jinja2的基本用法涉及到模板的创建和渲染。首先,你需要创建一个模板文件,然后在Python代码中加载并渲染这个模板。4.创建模板假设你有一个名为template.html的模板文件,内容如下: {{header}} {{content}}1234567891011在这个模板中,{{title}}、{{header}}和{{content}}是变量占位符,它们将在渲染时被实际的数据替换。5.渲染模板接下来,你可以使用Jinja2的Template类来渲染这个模板。以下是如何在Python代码中完成这个过程的示例:fromjinja2importTemplate#定义模板字符串template_str=""" {{header}} {{content}}"""#创建模板对象template=Template(template_str)#定义上下文字典,包含要渲染的数据context={'title':'HelloJinja2','header':'WelcometoJinja2','content':'ThisisasimpleexampleofusingJinja2.'}#渲染模板rendered_template=template.render(context)#打印渲染后的HTMLprint(rendered_template)1234567891011121314151617181920212223242526272829303132在这个例子中,我们首先定义了一个模板字符串template_str,然后创建了一个Template对象。接着,我们定义了一个包含数据的字典context,并将其传递给render方法。最后,我们打印出渲染后的HTML内容。6.高级特性Jinja2提供了许多高级特性,如继承、包含和宏,这些特性可以帮助你创建更复杂的模板。继承继承允许你创建一个基础模板,然后让其他模板继承这个基础模板。这在创建具有一致布局的Web应用时非常有用。{%blockcontent%}{%endblock%}1234567891011在这个基础模板中,我们定义了title和content两个块,其他模板可以通过继承这个模板并覆盖这些块来定义自己的内容。包含包含功能允许你在一个模板中包含另一个模板。这在创建重复的HTML结构时非常有用。 1234你可以在其他模板中包含这个header.html:{%include'header.html'%}1宏宏允许你定义可重用的模板代码块。这在创建复杂的模板时非常有用。{%macroinput(name,value='',type='text',size=20)%}{%endmacro%}12345678你可以在其他模板中调用这个宏:{{input('username')}}1二.需求实现1.需求描述如何将config.yaml中的内容变为赋值后的内容config.yamlllm:api_key:{{api_key}}api_base:{{api_base}}typepenai_chatmodel:{{llm_model}}model_supports_json:true123456赋值后的结果llm:api_base:your_api_baseapi_key:your_api_keymodel:your_llm_modelmodel_supports_json:truetypepenai_chat1234562.代码实现读取yaml文件并将占位符改为指定字符,并写入新文件importyamlfromjinja2importTemplate#读取YAML文件defread_yaml_as_str(file_path):withopen(file_path,'r')asfile:returnfile.read()file_path='config.yaml'yaml_data=read_yaml_as_str(file_path)data={'api_key':'your_api_key','api_base':'your_api_base','llm_model':'your_llm_model'}t=Template(yaml_data)filled_template=t.render(data)print(filled_template)defwrite_yaml(data,file_path):withopen(file_path,'w',encoding='utf-8')asfile:yaml.safe_dump(data,file)write_yaml(yaml.safe_load(filled_template),'config-template.yaml')12345678910111213141516171819202122232425262728觉得有用的话点个赞👍🏻呗。❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍👍👍🔥🔥🔥StayHungryStayFoolish道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 06:01 , Processed in 1.114005 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表