【jinja2模版生成(以渲染html为例)】学习笔记

本文介绍了Jinja2模板引擎的基本语法及高级特性,包括控制结构、变量取值、注释、内置常量、过滤器等,并通过示例展示了如何使用Jinja2生成HTML文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jinja2是一种模板语言,可以利用模版进行数据渲染的底层调用,避免编写重复的代码。

jinja2语法
1.控制结构 {% %} 使用'-'可以去掉换行, 控制结构需以 endXX 结尾
2.变量取值 {{ }}
3.注释 {# #}
Jinja2中for循环内置常量
内置常量描述
loop.index当前迭代的索引(从1开始)
loop.index0当前迭代的索引(从0开始)
loop.first是否是第一次迭代,返回True / False
loop.last是否是最后一次迭代,返回True / False
loop.length序列的长度
过滤器

可以通过“过滤器”对变量进行修改,可以理解为是jinja2里面的内置函数和字符串处理函数。

常用的过滤器有:

safe:			渲染时值不转义
capitialize:	把值的首字母转换成大写,其他子母转换为小写
lower:			把值转换成小写形式
upper:			把值转换成大写形式
title:			把值中每个单词的首字母都转换成大写
trim:			把值的首尾空格去掉
join:			拼接多个值为字符串
replace:		替换字符串的值
round:			默认对数字进行四舍五入,也可以用参数进行控制
int:			把值转换成整型

用法:通过管道(|)分割,多个过滤器可以链式调用,前一个过滤器的输出会作为后一个过滤器的输入。如:{{ icon | lower }}

可以将一些经常用到的代码片段放到宏中,然后把一些不固定的值抽取出来当成一个变量,在使用宏时传递参数,从而将宏渲染成为页面的一部分。
声明定义一个宏:

{% macro input(name, value='', type='text') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

调用这个宏:

<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>
函数
temp = Template(open的模版文件)  # 载入模版
ret = temp.render(传入参数)  # 渲染模版
文件结构
project
│   html.py
│
└───rely
     │   background.webp
     │   html.template
     │   icon.ico
html.py
from jinja2 import Template

http_template = open('Rely/html.template', encoding='utf8').read()  # 打开模版
temp = Template(http_template)  # 载入模版
# 设置参数
element = {'icon': "RELY/ICON.ICO",
           'background': "rely/background.webp",
           'links': ['https://www.baidu.com', 'https://image.baidu.com']}
ret = temp.render(element)  # 渲染模版
open(f'BaiDu.html', 'w', encoding='utf8').write(ret)
html.template

这里以生成html文件为例,所以会涉及到一些关于html的语法结构,所以简单提一下,不需要了解的可以直接看代码。

为方便理解,可以简单理解成:
html文件由html标签构成,标签以<XXX>开头,以</XXX>结束
开头标签<XXX>内可以传入各种参数修改属性
<html>
<head>
	<link href="{{ icon | lower }}" rel="shortcut icon">
    <title> 百度 </title>
	<style>  {# 设置参数 #}
		body
		{
			background-image:url("{{ background }}");  {# background- 设置背景的参数 #}
			background-repeat:no-repeat;
			background-attachment:fixed;
			background-position:center;
		}
    </style>
</head>

<body>
{%- for url in links%}
    <p>  {# 标签 p 为创建一个段落 #}
    <a href="{{ url }}"> 百度链接 </a></p>
{%- endfor %}
</body>
执行结果

运行html.py后会在同级目录下生成一个BaiDu.html文件

  • BaiDu.html以记事本形式打开:
<html>
<head>
	<link href="rely/icon.ico" rel="shortcut icon">
    <title> 百度 </title>
	<style>  
		body
		{
			background-image:url("rely/background.webp");  
			background-repeat:no-repeat;
			background-attachment:fixed;
			background-position:center;
		}
    </style>
</head>

<body>
    <p>  
    <a href="https://www.baidu.com"> 百度链接 </a></p>
    <p>  
    <a href="https://image.baidu.com"> 百度链接 </a></p>
</body>
  • BaiDu.html以网页形式打开:
    WEB
附件

ico

background

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值