【Python系列】Jinja2 模板引擎

news2024/9/22 17:24:09

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1.Jinja2 简介
      • 2.安装 Jinja2
      • 3.基本用法
      • 4.创建模板
      • 5.渲染模板
      • 6.高级特性
    • 二.需求实现
      • 1.需求描述
      • 2.代码实现

一.基本介绍

在现代软件开发中,模板引擎扮演着至关重要的角色,尤其是在 Web 开发领域。它们允许开发者将逻辑代码与用户界面分离,使得代码更加清晰、易于维护。在 Python 社区中,Jinja2 是一个广泛使用的模板引擎,它提供了强大的功能来处理模板渲染。
在这里插入图片描述

1.Jinja2 简介

Jinja2 是一个用 Python 编写的模板引擎,它继承了 Django 模板语言的许多特性,同时加入了一些独特的功能。Jinja2 支持继承、包含、宏等高级功能,使得模板的创建和管理变得更加灵活和强大。

2.安装 Jinja2

安装 Jinja2 非常简单,你可以通过 pip 命令轻松安装:

pip install Jinja2

安装完成后,你就可以在 Python 代码中使用 Jinja2 了。

3.基本用法

Jinja2 的基本用法涉及到模板的创建和渲染。首先,你需要创建一个模板文件,然后在 Python 代码中加载并渲染这个模板。

4.创建模板

假设你有一个名为 template.html 的模板文件,内容如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>{{ title }}</title>
  </head>
  <body>
    <h1>{{ header }}</h1>
    <p>{{ content }}</p>
  </body>
</html>

在这个模板中,{{ title }}{{ header }}{{ content }} 是变量占位符,它们将在渲染时被实际的数据替换。

5.渲染模板

接下来,你可以使用 Jinja2 的 Template 类来渲染这个模板。以下是如何在 Python 代码中完成这个过程的示例:

from jinja2 import Template

# 定义模板字符串
template_str = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ header }}</h1>
    <p>{{ content }}</p>
</body>
</html>
"""

# 创建模板对象
template = Template(template_str)

# 定义上下文字典,包含要渲染的数据
context = {
    'title': 'Hello Jinja2',
    'header': 'Welcome to Jinja2',
    'content': 'This is a simple example of using Jinja2.'
}

# 渲染模板
rendered_template = template.render(context)

# 打印渲染后的 HTML
print(rendered_template)

在这个例子中,我们首先定义了一个模板字符串 template_str,然后创建了一个 Template 对象。接着,我们定义了一个包含数据的字典 context,并将其传递给 render 方法。最后,我们打印出渲染后的 HTML 内容。

6.高级特性

Jinja2 提供了许多高级特性,如继承、包含和宏,这些特性可以帮助你创建更复杂的模板。

继承

继承允许你创建一个基础模板,然后让其他模板继承这个基础模板。这在创建具有一致布局的 Web 应用时非常有用。

<!-- base.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>{% block title %}My Website{% endblock %}</title>
  </head>
  <body>
    {% block content %}{% endblock %}
  </body>
</html>

在这个基础模板中,我们定义了 titlecontent 两个块,其他模板可以通过继承这个模板并覆盖这些块来定义自己的内容。

包含

包含功能允许你在一个模板中包含另一个模板。这在创建重复的 HTML 结构时非常有用。

<!-- header.html -->
<header>
  <h1>Welcome to My Website</h1>
</header>

你可以在其他模板中包含这个 header.html

{% include 'header.html' %}

宏允许你定义可重用的模板代码块。这在创建复杂的模板时非常有用。

{% macro input(name, value='', type='text', size=20) %}
<input
  type="{{ type }}"
  name="{{ name }}"
  value="{{ value|e }}"
  size="{{ size }}"
/>
{% endmacro %}

你可以在其他模板中调用这个宏:

{{ input('username') }}

二.需求实现

1.需求描述

如何将 config.yaml 中的内容变为赋值后的内容

config.yaml

llm:
  api_key: { { api_key } }
  api_base: { { api_base } }
  type: openai_chat
  model: { { llm_model } }
  model_supports_json: true

赋值后的结果

llm:
  api_base: your_api_base
  api_key: your_api_key
  model: your_llm_model
  model_supports_json: true
  type: openai_chat

在这里插入图片描述

2.代码实现

读取 yaml 文件并将占位符改为指定字符,并写入新文件

import yaml
from jinja2 import Template


# 读取YAML文件
def read_yaml_as_str(file_path):
    with open(file_path, 'r') as file:
        return file.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)


def write_yaml(data, file_path):
    with open(file_path, 'w', encoding='utf-8') as file:
        yaml.safe_dump(data, file)


write_yaml(yaml.safe_load(filled_template), 'config-template.yaml')

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

其实Python的代码迁移并没有想象中复杂

声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2257.html 提到Python&#xff0c;相信各位码农们都遇到过代码迁移的难题。我在处理版本兼容性问题时常常遇到Python 2与Python 3的不兼容&#xff0c;这给代码迁移带来了…

中国各企业避税程度相关数据(1998-2022年)

避税程度可以通过多种方式衡量&#xff0c;其中包括了名义所得税率与实际所得税率的差额&#xff08;RATE&#xff09;、名义所得税率与实际税率之差的五年平均值&#xff08;LRATE&#xff09;、会计与税收差异&#xff08;BTD&#xff09;以及扣除应计利润影响之后的会计与税…

树莓派+艺术品,有没有搞头?

由树莓派&#xff08;Raspberry Pi&#xff09;驱动的这一令人着迷的艺术品在国际上大受欢迎 Sisyphus Industries 公司的旗舰产品——具有家具和互动艺术品双重功能的沙盘。这个产品需要结构紧凑、价格低廉的控制硬件。Raspberry Pi 通过高度可靠的硬件和宝贵的庞大社区提供了…

秋招突击——笔试整理——蚂蚁集团笔试整理

文章目录 引言正文第一题——算折扣个人实现 第二题个人实现错误实现一修改实现二 第三题个人实现 总结 引言 今天做了蚂蚁集团的笔试&#xff0c;踩了很多雷&#xff0c;这里整理一下&#xff0c;记录一下&#xff0c;防止下次再踩雷&#xff01; 正文 第一题——算折扣 题…

基于窄带物联网的矿车追踪定位系统(论文+源码+实物)

1.功能设计 鉴于智能物联网的大趋势&#xff0c;本次基于窄带物联网的矿车追踪定位系统应具备以下功能&#xff1a; &#xff08;1&#xff09;实现实时定位&#xff0c;真正实现矿车随时随地定位; &#xff08;2&#xff09;定位精度高&#xff0c;采用该系统可以实现矿车在…

ISSACSIM-docker安裝

ISSAC SIM安裝 SetUp必要库安装开发工具配置參考資料 SetUp docker login 需要设置密码&#xff0c;是属于 NGC 的密码&#xff08;和NVDIA 不是一个&#xff09;如下&#xff1a; 必要库安装 1&#xff1a; python-3.10 版本及相应库安装 python env 2&#xff1a;python…

3.3.1 Linux中断的使能与屏蔽

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 3.3.1 Linux中断的使能与屏蔽 3.3.1.1 中断使能与屏蔽的三重关卡 本章的主题是hard_local_irq_disable()&#xff0c;它是对中断的关闭操作。为了彻底搞清楚中断关闭的机制&#xff0c;这里先对Linux使能与屏蔽…

深入理解HTTP的doGet与doPost

深入理解HTTP的doGet与doPost 1、doGet方法2、doPost方法3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发中&#xff0c;HTTP的GET和POST请求通过Servlet的doGet和doPost方法实现&#xff0c;两者在处理方式和适用场景上有…

那些令人惊艳的产品细节

随着智能手机的普及和互联网的发展&#xff0c;互联网产品已经渐渐渗透到我们的生活当中。 小编打开手机数了一下&#xff0c;不下50个APP&#xff0c;五花八门&#xff0c;最基本的生活服务类的&#xff0c;娱乐类的&#xff0c;社交等等。大家都会面临的一个问题是&#xff…

矩阵分块乘法的证明

设A是一个的矩阵&#xff0c;B是一个的矩阵&#xff0c; &#xff0c; A和B的分块矩阵分别记为 和 &#xff0c; 证明. 证明&#xff1a;设 要证明&#xff0c;可以首先证AB和是同型矩阵&#xff0c;即证明是一个的矩阵&#xff0c;接着再证&#xff0c;可以把AB做一个与同样…

1.C语言(变量和常量)

一、变量和常量的概念 变量&#xff1a;可以变的量 常量&#xff1a;不可变的量 变量举例&#xff1a; 1.变量的分类 1.1 分为全局变量和局部变量 全局变量&#xff1a;大括号外定义的变量 局部变量&#xff1a;大括号内的变量 1.2注意&#xff1a; 注入在同一范围内&am…

MAC多版本Java环境变量切换

在Mac上切换不同版本的Java环境变量可以通过以下步骤进行&#xff1a; 1. 打开终端&#xff08;Terminal&#xff09;应用程序。 2. 使用vi或者nano等编辑器打开.zshrc文件。如果该文件不存在&#xff0c;可以创建一个新的文件。 3.使用命令查看当前电脑已安装的JAVA版本 /usr…

不改一行代码轻松玩转 Go 应用微服务治理

作者&#xff1a;赵源筱 Go 应用微服务治理简介 Go 语言具有简洁、高效、并发性强等特性&#xff0c;已经被广泛认为是构建微服务的理想选择之一。Go 语言作为构建 Kubernetes、Docker 的主要编程语言&#xff0c;目前不仅在云原生基础组件领域中被广泛使用&#xff0c;也逐渐…

深入浅出LangChain:从模型调用到Agents开发的全流程指南

2024最新LangChain全面解析:从基础组件到AI应用构建 LangChain、LangGraph、LangSmith:打造完整AI解决方案的利器 本文将对于LangChain的基本组件、用途、用法进行介绍。 LangChain、LangGraph以及LangSmith的组合&#xff0c;极大的简化了开发者构建AI应用、Agents、Tools的…

看新闻知补贴不用专门薅羊毛!让工作变舒服的5个黄金法则——早读(逆天打工人爬取热门微信文章解读)

你们都不看新闻吗&#xff1f; 引言Python 代码第一篇 洞见 让工作变舒服的5个黄金法则第二篇 故事之散户结尾 (发了3000亿以旧换新补贴&#xff0c;大家没有感觉到力度吗&#xff1f; 时间到今年年底&#xff0c;9月-12月是消费区&#xff0c;中间夹杂个双十一&#xff0c;现在…

[易聊]软件项目测试报告

一、项目背景 随着互联网发展&#xff0c;各种各样的软件&#xff0c;比如游戏、短视频、购物软件中都有好友聊天功能&#xff0c;这是一个可在浏览器中与好友进行实时聊天的网页程序。“ 易聊 ”相对于一般的聊天软件&#xff0c;可以让用户免安装、随时随地的通过浏览器网页…

页面内容---复制粘贴【收藏版】【H5 web端亲测有效】

js中的复制粘贴 . 页面内容—复制粘贴【收藏版】【H5 web端亲测有效】 navigator.clipboard.writeText(copyText) 是 Web API 中的一个方法&#xff0c;用于将指定的文本内容复制到用户的剪贴板。这个方法属于 Clipboard API&#xff0c;它使得网页能够读取和写入剪贴板的内容…

【笔记】数据结构笔记02

toc 前话 算法学习网站&#xff1a; itcharge 代码随想录 labuladong 参考严蔚敏数据结构 树与等价问题 typedef PTree MFSet;//查找算法int find_mfset(MFSet S,int i){if(i<1||i>S.n) return -1;//i不属于任一集合for(ji;S.nodes[j].parent>0;jnodes[j].paren…

用宝塔部署项目到阿里云服务器访问不到的问题

今天用宝塔部署项目到阿里云&#xff0c;开始前端部署到了80端口&#xff0c;能正常访问&#xff0c;后端部署到了8081&#xff0c;但是后端接口一直无响应&#xff0c;最后超时。 但是java正常运行 系统防火墙的状态正常&#xff0c;策略也是放行 阿里云安全组也已经配置了 …

【性能优化】:从理论中来到实践中去(三)

本文主要介绍真实代码实现 序言 根据前面两篇文章的梳理 【性能优化】&#xff1a;探索系统瓶颈的根源&#xff08;一&#xff09; 【性能优化】&#xff1a;设计模式与技术方案解析&#xff08;二&#xff09; 我们已经知道了自动化跑批系统的核心功能&#xff0c;今天就来真…