深圳定制建站公司电话,网站建设工作都包括哪些方面,机械加工网站平台,建设用地规划许可证在哪个网站查询✨前言#xff1a;
#x1f31f;什么是jinja2#xff1f;
Jinja2 是一个强大的 Python 模版引擎#xff0c;主要用于生成HTML或其他文本文件。这个库非常适合开发动态网站和Web应用的视图层#xff0c;因为它支持逻辑操作如循环和条件判断#xff0c;还可以继承和重用模…✨前言
什么是jinja2
Jinja2 是一个强大的 Python 模版引擎主要用于生成HTML或其他文本文件。这个库非常适合开发动态网站和Web应用的视图层因为它支持逻辑操作如循环和条件判断还可以继承和重用模板。Jinja2以其灵活性和性能著称。
模板
要了解jinja2那么需要先理解模板的概念。模板在Python的web开发中广泛使用它能够有效的将业务逻辑和页面逻辑分开使代码可读性增强、并且更加容易理解和维护。 模板简单来说就是一个其中包涵占位变量表示动态的部分的文件模板文件在经过动态赋值后返回给用户可以理解为渲染。
jinja2介绍
jinja2是Flask作者开发的一个模板系统起初是仿django模板的一个模板引擎为Flask提供模板支持由于其灵活快速和安全等优点被广泛使用。
jinja2的优点 快速且强大Jinja2的性能非常出色它有一个快速的编译器和一个优化的沙箱执行环境来运行模板代码。这意味着即使你的模板很复杂Jinja2也能快速渲染出结果。 可读性和灵活性Jinja2的语法与Python相似这使得那些已经熟悉Python的开发者能够快速上手。同时它支持宏、模板继承和复杂表达式你可以轻松构建复杂且可维护的模板结构。 自动转义出于安全考虑Jinja2可以自动转义所有的输入变量从而减少跨站脚本攻击XSS的风险。这是一个很重要的功能特别是当应用程序的输入可能来源于不可信的用户时。 模板继承Jinja2支持模板继承这让你可以创建一个基础“骨架”模板并衍生出多个子模板非常适用于网站中有共用布局时。 丰富的过滤器和测试Jinja2内置了多种过滤器和测试你可以用来转换或评估变量。例如可以将日期格式化、列表排序、字符串转换为大写等。你也可以轻松地定义自己的过滤器和测试。 国际化和本地化支持Jinja2与Babel配合可以很好地支持多语言应用程序使得本地化和国际化流程更为简单。 独立于框架虽然Jinja2经常与Flask一同使用但其实它是独立于任何特定Web框架的。这意味着你可以在多种不同的项目中使用它这提升了Jinja2的可复用性。 沙箱执行Jinja2可以安全地运行在沙箱中意味着你可以控制模板可以执行哪些操作这有助于保护你的服务器不受潜在的恶意模板代码的影响。 可扩展性Jinja2的行为可以通过自定义的扩展来扩展。开发者可以增加自定义的语法、新的过滤器或测试提供额外的全局函数等。 jinja2安装
pip install Jinja2基础用法在Jinja2中创建模板然后填充数据。
#!/usr/bin/env python
# codingutf-8# Time : 2024/5/7
# Author : Summer
# File : test
# describe:
from jinja2 import Templatetemplate Template(Hello, {{ name }}!)
message template.render(nameWorld)print(message) # Hello, World!jinja2中的过滤器 那么如何使用这些过滤器呢 只需要在变量后面使用管道(|)分割多个过滤器可以链式调用前一个过滤器的输出会作为后一个过滤器的输入。
{{ abc | captialize }}
# Abc{{ abc | upper }}
# ABC{{ hello world | title }}
# Hello World{{ hello world | replace(world,daxin) | upper }}
# HELLO DAXIN{{ 18.18 | round | int }}
# 18Jinja2模版的常用功能
⭐️变量替换使用{{ variable_name }}在模板中使用变量。
pYour name is {{ name }}./p⭐️循环使用{% for %}循环遍历列表。
ul
{% for user in users %}li{{ user.name }}/li
{% endfor %}
/ul
⭐️迭代字典
dl
{% for key, value in my_dict.iteritems() %}
dt{{ key }}/dt
dd{{ value}}/dd
{% endfor %}
/dl⭐️迭代列表
ul
{% for user in users %}
li{{ user.username|title }}/li
{% endfor %}
/ul⭐️条件判断使用{% if %} … {% endif %}进行条件判断。
{% if user.is_active %}p{{ user.name }} is active./p
{% else %}p{{ user.name }} is not active./p
{% endif %}
⭐️模版继承可以让子模版继承父模版的结构。
base.html:
htmlheadtitle{% block title %}My Website{% endblock %}/title/headbody{% block content %}{% endblock %}/body
/html
child.html:
{% extends base.html %}{% block title %}Child Page{% endblock %}{% block content %}pThis is the Child Page./p
{% endblock %}
⭐️宏可以将重复的HTML模式定义为宏。
{% macro input(name, value, typetext) %}input type{{ type }} name{{ name }} value{{ value }}
{% endmacro %}
然后像调用函数一样在模板中使用它
{{ input(username) }}
⭐️Jinja2 环境配置与加载模板
实际开发中更常见的做法是从文件中加载模板。为此需要创建一个Environment实例来管理模板文件。
from jinja2 import Environment, FileSystemLoaderenv Environment(loaderFileSystemLoader(templates))
template env.get_template(mytemplate.html)
print(template.render(nameWorld))
其中模板文件mytemplate.html位于templates目录下。
⭐️示例:
尽管Jinja2经常和Flask框架搭配使用但是它同样可以为其他类型的Python脚本生成HTML。
#!/usr/bin/env python
# codingutf-8# Time : 2024/5/7 11:18
# Author : Summer
# File :
# describe:from jinja2 import Environment, FileSystemLoader
import webbrowserenv Environment(loaderFileSystemLoader(.))
template env.get_template(report.template.html)report_data {title: Quarterly Report,headers: [Revenue, Expenses, Profit],rows: [[500000, 200000, 300000], [600000, 300000, 300000]]
}html_content template.render(datareport_data)# 将生成的HTML保存到文件
with open(report.html, w) as f:f.write(html_content)# 用默认浏览器打开
webbrowser.open_new_tab(report.html)FileSystemLoader 文件系统加载器不需要模板文件存在某个Python包下可以直接访问系统中的文件。
模板report.template.html
!DOCTYPE html
html langen
headtitle{{ data.title }}/title
/head
bodyh1{{ data.title }}/h1tabletr{% for header in data.headers %}th{{ header }}/th{% endfor %}/tr{% for row in data.rows %}tr{% for cell in row %}td{{ cell }}/td{% endfor %}/tr{% endfor %}/table
/body
/html
输出
✨小结
以上示例只是展示了Jinja2的一些基础用法。Jinja2是一个非常灵活且功能丰富的模板引擎支持复杂的表达式、过滤器、测试等高级功能非常适合开发需要高度定制模板的Web应用。大家觉得对自己学习有用的话可以点赞哈您的点赞是作者持续创作的动力。