首页 > 编程语言 >Python HTML 的模板引擎 Jinja2

Python HTML 的模板引擎 Jinja2

时间:2023-08-27 18:11:54浏览次数:33  
标签:title Python blog HTML Jinja2 3.0 模板

Python Jinja2 是一个用于生成动态 HTML 的模板引擎。它可以让你在 HTML 中使用 Python 的语法和逻辑,从而实现数据和视图的分离。本文将介绍 Python Jinja2 的基本用法和特性,以及一些实例和技巧。

安装和导入

要使用 Python Jinja2,你需要先安装它。你可以使用 pip 命令来安装:

pip install Jinja2

安装完成后,你可以在你的 Python 代码中导入 jinja2 模块:

from jinja2 import Template, Environment, FileSystemLoader

创建和渲染模板

要使用 Python Jinja2,你需要先创建一个模板文件,通常是以 .html 为扩展名的文件。模板文件中可以包含 HTML 代码,以及一些 Jinja2 的语法元素,如变量、过滤器、控制结构等。下面是一个简单的模板文件的例子:

<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
</body>
</html>

在这个模板文件中,我们使用了两个变量:{{ title }} 和 {{ content }}。这些变量将在渲染模板时被替换为实际的值。要渲染模板,我们需要在 Python 代码中创建一个 Environment 对象,指定模板文件的路径,然后使用 get_template 方法加载模板文件,最后使用 render 方法传入变量的值,得到渲染后的 HTML 字符串。下面是一个渲染模板的例子:

# 创建一个 Environment 对象,指定模板文件的路径
env = Environment(loader=FileSystemLoader('templates'))
# 加载模板文件
template = env.get_template('example.html')
# 渲染模板,传入变量的值
html = template.render(title='Python Jinja2', content='This is a blog about Python Jinja2.')
# 打印渲染后的 HTML 字符串
print(html)

运行这段代码,我们可以得到如下的输出:

<html>
<head>
    <title>Python Jinja2</title>
</head>
<body>
    <h1>Python Jinja2</h1>
    <p>This is a blog about Python Jinja2.</p>
</body>
</html>

可以看到,模板中的变量已经被替换为我们传入的值。

使用过滤器

过滤器是一种可以对变量进行转换或处理的功能。在模板中,我们可以使用 | 符号来应用过滤器。Jinja2 提供了很多内置的过滤器,例如 capitalize、lower、upper、title、trim、escape 等。我们也可以自定义过滤器。下面是一个使用过滤器的例子:

<html>
<head>
    <title>{{ title|title }}</title>
</head>
<body>
    <h1>{{ title|title }}</h1>
    <p>{{ content|trim|escape }}</p>
</body>
</html>

在这个例子中,我们对 title 变量应用了 title 过滤器,它会将每个单词的首字母大写。我们对 content 变量应用了 trim 和 escape 过滤器,它们会分别去除两端的空白字符和转义 HTML 特殊字符。如果我们传入如下的值:

title = 'python jinja2'
content = '  This is a blog about <b>Python Jinja2</b>.  '

那么渲染后的 HTML 字符串为:

<html>
<head>
    <title>Python Jinja2</title>
</head>
<body>
    <h1>Python Jinja2</h1>
    <p>This is a blog about &lt;b&gt;Python Jinja2&lt;/b&gt;.</p>
</body>
</html>

使用控制结构

控制结构是一种可以实现条件判断和循环遍历的功能。在模板中,我们可以使用 {% … %} 符号来表示控制结构的开始和结束。Jinja2 支持的控制结构有 if、elif、else、for、endfor、endif 等。下面是一个使用控制结构的例子:

<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ content }}</p>
    {% if comments %}
    <ul>
        {% for comment in comments %}
        <li>{{ comment }}</li>
        {% endfor %}
    </ul>
    {% else %}
    <p>No comments.</p>
    {% endif %}
</body>
</html>

在这个例子中,我们使用了 if 和 for 语句来实现条件判断和循环遍历。如果我们传入如下的值:

title = 'Python Jinja2'
content = 'This is a blog about Python Jinja2.'
comments = ['Great blog!', 'Very informative.', 'I learned a lot.']

那么渲染后的 HTML 字符串为:

<html>
<head>
    <title>Python Jinja2</title>
</head>
<body>
    <h1>Python Jinja2</h1>
    <p>This is a blog about Python Jinja2.</p>
    <ul>
        <li>Great blog!</li>
        <li>Very informative.</li>
        <li>I learned a lot.</li>
    </ul>
</body>
</html>

结语

Python Jinja2 是一个强大而灵活的模板引擎,它可以让你在 HTML 中使用 Python 的语法和逻辑,从而实现数据和视图的分离。本文只是介绍了 Python Jinja2 的基本用法和特性,还有很多高级功能和技巧没有涉及,如继承、宏、测试、过滤器等。如果你想了解更多关于 Python Jinja2 的内容,你可以参考官方文档或其他相关资料。

: [Jinja — Jinja Documentation (3.0.x)] : [Python Jinja2 模板引擎教程 - 简书] : [Builtin Filters — Jinja Documentation (3.0.x)] : [Custom Filters — Jinja Documentation (3.0.x)] : [Control Structures — Jinja Documentation (3.0.x)] : [Template Designer Documentation — Jinja Documentation (3.0.x)] : [Jinja Documentation (3.0.x)] : https://www.jianshu.com/p/9b4a9c5f4f6a : https://jinja.palletsprojects.com/en/3.0.x/templates/#builtin-filters : https://jinja.palletsprojects.com/en/3.0.x/api/#custom-filters : https://jinja.palletsprojects.com/en/3.0.x/templates/#control-structures : https://jinja.palletsprojects.com/en/3.0.x/templates/ : https://jinja.palletsprojects.com/en/3.0.x/

标签:title,Python,blog,HTML,Jinja2,3.0,模板
From: https://www.cnblogs.com/shoshana-kong/p/17660577.html

相关文章

  • Python+Requests示例记录【2023-08-27】
    importrequestsimportjsonpayload={"userNo":"用户","password":"密码"}response=requests.post(url,json=payload)print(response)print('---------------------------')print(response.status_code)print('......
  • python代码模拟一个工厂的库存管理软件
    下面是一个简单的工厂库存管理软件的Python代码示例:importjson#初始化库存数据inventory={"products":[{"id":1,"name":"Product1","quantity":10},{"id":2,"name":"Product2"......
  • python+playwright 学习-76 playwright 忽略SSL 错误
    前言playwright设置ignore_https_errors参数忽略SSL错误context上下文中设置browser.new_context()创建上下文时fromplaywright.sync_apiimportsync_playwright,expectwithsync_playwright()asp:browser=p.chromium.launch(headless=False)conte......
  • 用vscode运行python
    0下载好vscode和python1下载python插件选择python解释器F1或ctrl+shift+P打开命令栏输入Python:SelectInterpreter选择我们下载好的解释器3新建一个python文件打开我们的文件夹,然后新建.py文件写入代码运行python代码就好了......
  • excel+python 根据A列分类查找B列值最大的C列元素
    根据C列分类查找B列值最大的C列元素1https://developer.aliyun.com/article/306428......
  • 学习笔记413—python实现BP神经网络进行预测和误差分析(附源代码)
    python实现BP神经网络进行预测和误差分析(附源代码)反向传播算法也称为BP神经网络,是一种带有反馈的神经网络反向学习方法,它可以对神经网络的各层上的各个神经元的各个神经元之间的连接权重进行不断迭代修改,使神经网络将输入数据转换成期望的输出数据 BP神经网络的学习过程由正向......
  • 圣天诺加密锁(加密狗)保护Python应用程序防止被反编译Python代码保护的好方法
    (开发套件使用的是原HASP/SafeNet/金雅拓/泰雷兹加密狗开发工具)(注:本文为Python程序保护的纯技术贴,欢迎留言探讨)开发工具下载:​​http://www.chinadlp.com/?list-DriveDownload.html​​  概述使用圣天诺加密锁保护Python应用程序的方法:1.SentinelLDKEnvelope带S......
  • 圣天诺加密锁保护Python应用程序防止被反编译
    (开发套件使用的是原HASP/SafeNet/金雅拓/泰雷兹加密狗最新开发工具)(注:本文为Python程序保护的纯技术贴,欢迎留言探讨)开发工具下载:http://www.chinadlp.com/?list-DriveDownload.html,概述使用圣天诺加密锁保护Python应用程序的方法:1.SentinelLDKEnvelope带SentinelLDK数据文件......
  • Python单元测试——深入理解unittest
    单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest,testtools,subunit,coverage,testrepository,nose,mox,mock,fixtures,discover,再加上setuptools,distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它......
  • policy机制中经典的python用法
    由于接触python时间还不长,属于边用边学,在看项目代码的时候,遇到了很多不太懂的python语法,但是我认为这些用法用的实在是好,希望以后自己在写程序时,也能写出这么经典的代码,在这里记录下来这些:1.将函数名作为参数传递给另一个模块中的函数使用:definit():......#read_cached......