本文共 3090 字,大约阅读时间需要 10 分钟。
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__)
如果输出了正确的版本号,说明安装成功。
以下示例展示了如何使用 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 开发中,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/