【Python系列】Jinja2 模板引擎

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
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) %}
<inputtype="{{ 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_chatmodel: { { llm_model } }model_supports_json: true

赋值后的结果

llm:api_base: your_api_baseapi_key: your_api_keymodel: your_llm_modelmodel_supports_json: truetype: 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.rhkb.cn/news/411450.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】软件测试生命周期与Bug

目录 &#x1f4d5; 前言 &#x1f334;软件测试的生命周期 ​编辑&#x1f332;BUG &#x1f6a9; 概念 &#x1f6a9;描述bug的要素 &#x1f6a9;bug的级别 &#x1f6a9;bug的生命周期 &#x1f3c0;先检查自身&#xff0c;是否bug描述不清楚 &#x1f3c0;站在用…

Docker 安装 SqlServer

摘要&#xff1a;我们工作当中经常需要拉取多个数据库实例出来做集群&#xff0c;做测试也好&#xff0c;通过 Docker 拉取 SqlServer 镜像&#xff0c;再通过镜像运行多个容器&#xff0c;几分钟就可以创建多个实例&#xff0c;效率是相当的高。 1. docker 拉取镜像 注意&am…

[mysql]mysql的演示使用

mysql的演示使用 几个常见操作 1&#xff1a;show databases 这里第一个information_schema代表的是数据库的基本系统信息&#xff0c;数据库名称&#xff0c;表的名称&#xff0c;存储权限 第二个是mysql&#xff0c;保存的是我们数据库运行的时候需要的系统信息&#xff0…

数据中台即将消亡,数智基建取而代之?

数据中台即将消亡&#xff0c;数智基建取而代之&#xff1f; 前言数智基建 前言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;企业的发展如同在浩瀚海洋中航行的巨轮&#xff0c;而数据则是推动这艘巨轮前行的强大动力。然而&#xff0c;如何有效地管理和利用数据&#xff0c;…

Kafka3.x 使用 KRaft 模式部署 不依赖 ZooKeeper

前言 Kafka 从 2.8.0 版本开始引入了 Kafka Raft Metadata Mode&#xff08;KRaft 模式&#xff09;&#xff0c;这个模式允许 Kafka 在不依赖 ZooKeeper 的情况下进行元数据管理。KRaft 模式在 Kafka 3.0.0 中进入了稳定版本,本文部署的 Kafka_2.12-3.6.0 单机模式 环境 Ce…

工厂andon暗灯系统数字化应用案例

在当今数字化浪潮席卷制造业的时代&#xff0c;工厂的高效运作和精益管理离不开先进的技术手段。Andon 暗灯系统作为精益制造执行中的核心工具和 MES 制造执行系统的重要组成部分&#xff0c;正以其强大的功能为工厂带来全新的变革。 某汽车零部件制造工厂&#xff0c;拥有多条…

Java设计模式之策略模式详细讲解和案例示范

Java设计模式之策略模式详细讲解和案例示范 在软件开发中&#xff0c;策略模式是一种常见且非常有用的设计模式。它允许定义一系列算法&#xff0c;将它们一个个封装起来&#xff0c;并且使它们可以互相替换。策略模式让算法可以独立于使用它们的客户端而变化。本篇文章将详细…

[MySql]保姆级上手教程

介绍 通过数据库管理系统, 编写执行SQL语句, 实现对数据库数据的管理 数据库(DataBase): 储存和管理数据的仓库数据库管理系统(DBMS): 操作和管理数据库的软件SQL语言: 操作关系型数据库的通用语言数据库可以分为关系型数据库和非关系型数据库 相关产品 常见的关系型数据库产…

【golang-入门】环境配置、VSCode开发环境配置

golang介绍基础信息 windows环境配置安装包下载安装环境变量设置检查 VSCode开发配置插件配置在 Visual Studio Code 中安装通义灵码go hello word 参考资料 golang介绍 基础信息 golang官网&#xff1a;https://go.dev/golang学习网&#xff1a;https://studygolang.com/使用…

android使用YOLOV8数据返回到JAVA方法(JAVA)

一、下载扩展文件(最耗时,所以放第一步) 1.opencv下载 1)官网:Releases - OpenCV 2)下载最新版本的android包 2.NCNN下载 1)NCNN下载地址(20220420版本):https://github.com/Tencent/ncnn/releases/download/20220420/ncnn-20220420-android-vulkan.zip 3.在你的…

【C++二分查找】2271. 毯子覆盖的最多白色砖块数

本文涉及的基础知识点 C二分查找 LeetCode2271. 毯子覆盖的最多白色砖块数 给你一个二维整数数组 tiles &#xff0c;其中 tiles[i] [li, ri] &#xff0c;表示所有在 li < j < ri 之间的每个瓷砖位置 j 都被涂成了白色。 同时给你一个整数 carpetLen &#xff0c;表…

使用 Jpom 自动化构建并部署项目

1、前言 Jpom 是一款专为开发者设计的轻量级运维工具。它提供了一整套从项目构建到自动部署&#xff0c;再到日常运维和项目监控的解决方案&#xff0c;帮助开发者更好地管理和维护项目。 Jpom 的目标是让开发者不再为复杂的运维流程头疼。它支持多种安装方式&#xff0c;灵活…

RoboCat: A Self-Improving Generalist Agent for Robotic Manipulation

发表时间&#xff1a;22 Dec 2023 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4836882796542689281&noteId2413286807916664832 作者单位&#xff1a;Google DeepMind Motivation&#xff1a;受视觉和语言基础模型的最新进展的启发&#xff0c…

【教程】实测np.fromiter 和 np.array 的性能

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 函数简介 np.fromiter np.array 测试代码 实验结果 结果分析 实验总结 学长想说 函数简介 np.fromiter np.fromiter 是 NumPy 提供的一…

设计模式 -- 装饰者模式(Decorator Pattern)

1 问题引出 1.1 咖啡馆订单项目 咖啡种类/单品咖啡&#xff1a;Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料&#xff1a;Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时&#xff0c;具有良好的扩展性、改动方便、维护方便 使用…

无人机之云台的作用

无人机云台在无人机技术中扮演着至关重要的角色&#xff0c;其作用主要体现在以下几个方面&#xff1a; 一、 确保拍摄稳定性 防抖动&#xff1a;无人机在飞行过程中&#xff0c;尤其是在复杂环境下&#xff0c;如遇到风力干扰或进行高速飞行时&#xff0c;机身容易产生震动和…

Beyond Compare忽略特定格式文本,忽略匹配正则表达式

一 概述 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比&#xff0c;除了内容有差异外&#xff0c;自动生成的ID也不同&#xff0c;想忽略这些ID。特别是文件内容比较多的时候。 如上图&#xff0c;其中UUID“*”的部分我想忽略。 二 方法 方法1 通过Beyond Co…

MySQL 中间件 MySQL-Router

目录 1 MySQL-Router 的介绍 2 MySQL-Router 负载均衡 2.1 设计目的&#xff1a; 2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别 2.3 MySQL-Router 的优势 3 MySQL-Router 的获取 3 MySQL-Router 的使用 3.1 实验环境 3.2 MySQL-Router 部署 3.3 MySQL-Router 配置 3.4 测…

HarmonyOS--合理使用动画

一、概述 动画是应用开发中必不可少的部分&#xff0c;它可以使应用程序更加生动和易于互动&#xff0c;一方面可以提升用户体验、增强视觉吸引力&#xff0c;另一方面可以引导用户操作、提高信息传达效率。应用程序中&#xff0c;页面层级间的转场、点击交互、手势操控都可以添…

ODOO17文档打印(输出)方案 -- ODOO17 document printing (output) scheme

根据使用场景不同&#xff0c;ODOO17支持以下几种文档打印(输出)方案&#xff1a; According to different usage scenarios, ODOO17 supports the following document printing (output) schemes: 1、QWEB ODOO原生打印功能&#xff08;生成PDF文档&#xff09; odoo使用的主…