flaskweb开发Jinja2 模板过滤器|“朝闻道”知识分享大赛
这是我参加朝闻道知识分享大赛的第11篇文章
Jinja2 模板过滤器笔记
常用过滤器
default 过滤器
-
使用方式:
{{ value|default('默认值') }}-
如果
value不存在,则使用default过滤器提供的默认值。 -
如果要判断
value是否为False(如None、空字符串、空列表、空字典等),需传递boolean=True参数:{{ value|default('默认值', boolean=True) }}。 -
可以用
or替代default('默认值', boolean=True),例如:{{ signature or '此人很懒,没有留下任何说明' }}。
-
自动转义过滤器
-
safe过滤器: 关闭字符串的自动转义。 -
escape过滤器: 对字符串进行转义。 -
autoescape标签: 控制代码块的自动转义开关。jinja
复制
{% autoescape off/on %} ...代码块 {% endautoescape %}
常用过滤器
-
first(value): 返回序列的第一个元素。-
示例:
names|first
-
-
format(value, *args, **kwargs): 格式化字符串。-
示例:
{{ "%s - %s"|format('Hello?', "Foo!") }} -
输出:
Hello? - Foo!
-
-
last(value): 返回序列的最后一个元素。-
示例:
names|last
-
-
length(value): 返回序列或字典的长度。-
示例:
names|length
-
-
join(value, d=u''): 用d参数的值拼接序列成字符串。-
示例:
names|join(', ')
-
-
safe(value): 如果开启了全局转义,safe过滤器会关闭变量的转义。-
示例:
content_html|safe
-
-
int(value): 将值转换为int类型。-
示例:
price|int
-
-
float(value): 将值转换为float类型。-
示例:
price|float
-
-
lower(value): 将字符串转换为小写。-
示例:
name|lower
-
-
upper(value): 将字符串转换为大写。-
示例:
name|upper
-
-
replace(value, old, new): 将字符串中的old替换为new。-
示例:
text|replace('old', 'new')
-
-
truncate(value, length=255, killwords=False): 截取指定长度的字符串。-
示例:
text|truncate(50)
-
-
striptags(value): 删除字符串中的所有 HTML 标签,多个空格替换为一个空格。-
示例:
html_content|striptags
-
-
trim: 截取字符串前后的空白字符。-
示例:
text|trim
-
-
string(value): 将变量转换为字符串。-
示例:
number|string
-
-
wordcount(s): 计算长字符串中的单词个数。-
示例:
text|wordcount
-
自定义模板过滤器
基本概念
-
过滤器本质上是一个函数。
-
模板中调用过滤器时,变量的值会作为第一个参数传给过滤器函数,函数的返回值作为过滤器的返回值。
示例:自定义 cut 过滤器
@app.template_filter('cut')
def cut(value):
value = value.replace("hello", '')
return value
示例:自定义时间过滤器
@app.template_filter('li_time')
def li_time(time):
if isinstance(time, datetime):
now = datetime.now()
li = (now - time).total_seconds()
if li < 60:
return "刚刚"
elif li >= 60 and li < 60 * 60:
return f"{int(li / 60)}分钟前"
elif li >= 60 * 60 and li < 60 * 60 * 24:
return f"{int(li / (60 * 60))}小时前"
else:
return time.strftime("%Y-%m-%d")
else:
return time
总结
Jinja2 提供了丰富的内置过滤器,同时也支持自定义过滤器,使得模板渲染更加灵活和强大。通过合理使用过滤器,可以大大简化模板中的逻辑处理,提高代码的可读性和可维护性
相关推荐
基于能源枢纽耦合的电热气综合能源系统稳态能流分析方法(Matlab代码实现)
内容概要:本文提出了一种基于能源枢纽耦合的电热气综合能源系统稳态能流分析方法,并实现了基于虚拟流与二阶锥松弛的含分布式电源配电网多时段故障恢复模型(Matlab代码实现)。该方法针对配电网在发生多线路故障时的恢复问题,构建了一个统一考虑网络重构、孤岛划分与检修进度的多时段优化模型,旨在最小化网损和甩负荷惩罚。通过引入虚拟流思想保证孤岛内部连通性,结合二阶锥松弛技术将非线性潮流方程转化为可高效求解的混合整数二阶锥规划问题,提升了模型的可解性与计算效率。在IEEE 33节点系统上的仿真验证展示了各时段的网络拓扑变化、节点电压分布及负荷恢复情况,证明了该方法在提升系统韧性与恢复效率方面的有效性。文章还深入评述了建模细节,指出了在负荷分级、无功处理、辐射状约束等方面的改进方向,为后续研究提供了理论参考与实现基础。; 适合人群:具备电力系统、优化理论及Matlab/Simulink仿真基础,从事智能电网、综合能源系统或配电网故障恢复相关研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习和复现顶刊论文中关于含分布式电源配电网多时段故障恢复的先进建模方法;② 掌握利用虚拟流保证孤岛连通性、二阶锥松弛处理非线性潮流等关键技术;③ 为自身研究中的配电网重构、孤岛划分或综合能源系统优化等问题提供模型参考和代码基础。; 阅读建议:此资源以复现高水平学术论文为核心,不仅提供了可运行的代码,更包含了详尽的建模思路解析与改进讨论。学习者应结合摘要、正文和参考文献,深入理解模型的物理意义与数学推导,重点关注虚拟流、大常数松弛和二阶锥松弛的应用,并尝试在提供的代码基础上进行扩展和优化,以深化对综合能源系统分析方法的理解。
无刷直流电机BLDC转速电流双闭环+无位置传感器控制仿真【仿真+详解说明报告+参考文献】
内容概要:本文提供了一套关于无刷直流电机(BLDC)转速电流双闭环控制与无位置传感器控制的Simulink仿真资源,包含多个仿真模型,如基于模糊PID与传统PID的对比控制、滑模观测器结合双闭环PI控制等。资源重点实现了无位置传感器控制策略,通过转速和电流双闭环调节提升电机控制性能,涵盖控制算法设计、仿真模型搭建全过程,并配有详细的说明文档与参考文献,帮助用户深入理解控制原理与实现方法。; 适合人群:具备一定电机控制理论基础和Simulink仿真经验的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习和掌握无刷直流电机的双闭环控制策略及无位置传感器控制技术;②对比分析模糊PID与传统PID在电机控制中的动态响应、抗干扰能力与控制精度;③开展先进控制算法(如滑模观测器、模糊控制)的研究与仿真验证,支持科研项目、毕业设计或工程应用开发。; 阅读建议:建议读者结合所提供的说明文档和参考文献,循序渐进地运行和调试各个仿真模型,重点关注控制器参数整定、观测器设计、系统启动特性与动态响应过程,以深化对现代电机控制理论的理解与工程实践能力。
产业园区运营负责人如何实现创新能力资源的精准匹配与高效对接?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
政府科技管理者在推动科技成果落地过程中,如何高效追踪企业技术需求并精准对接?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
科技中介服务机构在推动技术交易时,如何实现高效撮合与专业服务?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。



