博客
关于我
python | jinja,一个超酷的 Python 库!
阅读量:799 次
发布时间:2023-03-06

本文共 3090 字,大约阅读时间需要 10 分钟。

大家好,今天为大家分享一个超酷的 Python 库 - jinja。

Github地址:https://github.com/pallets/jinja

在现代 Web 开发中,模板引擎是用于生成动态 HTML 内容的核心工具之一。Jinja 是 Python 中最流行的模板引擎之一,它以简洁高效的语法、强大的扩展性和良好的性能深受开发者喜爱。

Jinja 的主要功能是将动态数据渲染到模板中,适用于 Web 应用开发、文档生成和其他需要动态内容的场景。作为 Flask 等主流 Python Web 框架的默认模板引擎,Jinja 提供了强大的功能和灵活性,帮助开发者更高效地构建复杂的动态内容。

安装

安装 Jinja 非常简单,可以通过 pip 快速完成:

pip install Jinja2

安装完成后,可以通过以下代码验证是否成功:

import jinja2 print(jinja2.__version__)

如果输出了正确的版本号,说明安装成功。

特性

  • 简洁的模板语法:支持条件判断、循环、过滤器等功能,适合快速构建动态内容。
  • 强大的模板继承:允许通过父子模板机制构建复杂的模板结构,提升代码复用性。
  • 支持过滤器和函数:内置丰富的过滤器和函数,并允许自定义,满足多样化需求。
  • 安全性:默认对输出内容进行转义,防止 XSS 攻击。
  • 高性能:通过预编译模板实现快速渲染,适合高并发场景。
  • 可扩展性:支持编写自定义扩展和加载器,适应复杂应用场景。
  • 环境配置灵活:支持模板缓存、加载器配置以及自定义渲染逻辑。

基本功能

渲染简单模板

以下示例展示了如何使用 Jinja 渲染一个简单模板:

from jinja2 import Template # 定义模板字符串 template = Template("Hello, {name}") # 渲染模板 output = template.render(name="World") print(output)

输出结果:

Hello, World!

条件判断

Jinja 支持在模板中进行条件判断:

template = Template("{% if score >= 60 %}及格{% else %}不及格{% endif %}") output = template.render(score=75) print(output)

输出结果:

及格

循环

模板中可以使用循环生成动态内容:

template = Template("""        {% for item in items %}    {item} {% endfor %} """) output = template.render(items=["Python", "Jinja", "Flask"]) print(output)

输出结果:

Python     Jinja     Flask

使用过滤器

Jinja 提供了内置的过滤器,用于对变量进行格式化处理:

template = Template("大写: {message|upper}") output = template.render(message="jinja") print(output)

输出结果:

大写: JINJA

高级功能

模板继承

通过模板继承,可以在父模板中定义通用布局,并让子模板扩展或覆盖特定部分。

父模板 base.html

{% block title %}默认标题{% endblock %}    {% block header %}默认头部{% endblock %}    {% block content %}默认内容{% endblock %}    {% block footer %}默认底部{% endblock %}

子模板 child.html

{% extends "base.html" %}{% block title %}自定义标题{% endblock %}{% block content %} 这是自定义内容。 {% endblock %}

渲染子模板时,Jinja 会将内容替换到父模板的占位符中。

自定义过滤器

可以定义自定义过滤器以扩展模板功能:

from jinja2 import Environment, Template def reverse_string(value): return value[::-1] env = Environment() env.filters['reverse'] = reverse_string template = env.from_string("反转: {message|reverse}") output = template.render(message="Jinja") print(output)

输出结果:

反转: ajniJ

使用加载器加载模板

Jinja 支持从文件系统或其他位置加载模板:

from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates')) template = env.get_template('example.html') output = template.render(name="Jinja") print(output)

templates/example.html 文件中定义模板内容:

Hello, {name}!

输出结果:

Hello, Jinja!

实际应用场景

Web 开发

在 Web 开发中,Jinja 常用于生成动态 HTML 页面。例如,在 Flask 中:

from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html', name="Flask") if __name__ == '__main__':     app.run()

templates/index.html 中定义模板内容:

欢迎使用 {name}

访问浏览器时,将显示动态生成的页面。

文档生成

Jinja 可以用于生成动态报告或文档,例如生成配置文件或 Markdown 报告:

template = Template("""# 报告用户: {user} 成绩: {score}""") output = template.render(user="Alice", score=85) print(output)

配置文件模板

Jinja 适合用来动态生成 YAML 或 JSON 配置文件:

template = Template("server: host: {host} port: {port}") output = template.render(host="127.0.0.1", port=8080) print(output)

输出结果:

server: host: 127.0.0.1 port: 8080

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

转载地址:http://zzofk.baihongyu.com/

你可能感兴趣的文章
python tkinter 按钮颜色_Python3 tkinter基础 Button bg 按钮的背景颜色
查看>>
Python Tkinter 笔记本小部件
查看>>
Python Tkinter 网格复选框
查看>>
Python TLS版本匹配
查看>>
python车牌精确定位
查看>>
python try except finally_Python3基础 try-except-finally 的简单示例
查看>>
Python Turtle图形窗口不显示任何内容
查看>>
Python tweepy写入到sqlite3 db
查看>>
Python TypeError:格式字符串的参数不足
查看>>
Python UI自动化测试Page Objects企业级实战
查看>>
Python趣味编程:用代码创造无限可能
查看>>
Python UI自动化测试三方库扩展详解
查看>>
python谷歌翻译,2021年9月10日亲测可用,一次可以翻译十万,强烈star
查看>>
Python UI自动化测试数据驱动实战
查看>>
Python UI自动化测试集成UnitTest
查看>>
Python UI自动化测试集成UnitTest
查看>>
python unicode-escape
查看>>
Python unittest mock:是否可以在测试时模拟方法默认参数的值?
查看>>
Python unittest单元测试框架 TestSuite测试套件
查看>>
PYTHON调离线语音合成并实时播放
查看>>