Python(Web时代)——jinja2模板
后台-插件-广告管理-内容页头部广告(手机) |
简介
Jinja2是Flask框架默认支持的模板引擎,是python的web项目中被广泛应用的一种模板引擎,jinja2的作者与Flask是同一个人。
jinja2具有以下特点:
-
非常灵活,提供了控制结构、表达式与继承等
-
性能好
-
可读性强
渲染一个模板,通过render_template方法即可
语法
引入渲染函数
使用之前需要先通过import 导入
from flask import render_template注:要将模板文件放置在项目根目录的 templates文件夹中
在Jinja2中,存在三种语法
-
变量取值 {{ }}
-
控制结构(逻辑代码) {% %}
-
注释 {# #}
示例1:变量取值 {{ }}
@app.route("/tmp") def template_test(): name = "我是字符串" num =1 mylist = [1,2,3,4] mydict={"name":"张三","age":33} mytuple = (1,2,3,4) return render_template("template.html",name=name,num=num,mylist=mylist,mydict=mydict,mytuple=mytuple)template.html 模板文件
字符串:{{ name }}
数字:{{ num }}
列表:{{ mylist }}
列表中的第二个元素:{{ mylist[1] }}
字典:{{ mydict }}
字典的name:{{ mydict['name'] }}
元组:{{ mytuple }}
元组的第2个元素:{{ mytuple[1] }}
调用结果
示例2:控制结构 {% %}
字符串:{{ name }}
数字:{{ num }}
列表:{{ mylist }}
列表中的第二个元素:{{ mylist[1] }}
字典:{{ mydict }}
字典的name:{{ mydict['name'] }}
元组:{{ mytuple }}
元组的第2个元素:{{ mytuple[1] }}
{% if name=='张三' %} 条件满足,我是张三 {% else %} 条件不满足 {% endif %} 循环列表数据: {% for i in mylist %} {{ i }} {% endfor %}调用结果
示例3:注释 {# #}
{# 循环列表数据:#} {% for i in mylist %} {{ i }} {% endfor %}过滤器
有些时候需要对要在模板中的变量值做一些特殊处理,比如首字母大写,去掉前后空格、字符串拼接等等,这时就可以使用过滤器。
过滤器的使用
通过 | 来使用过滤器,与Linux中的管道类似
例如,将字符串的首字母大写
{{ name | capitalize }}
常用的过滤器
过滤器 | 说明 |
---|---|
safe | 渲染时值不转义 |
capitalize | 首字母大写,其他字母小写 |
lower | 所有字母小写 |
upper | 所有字母大写 |
title | 值中每个单词首字母大写 |
trim | 去除首尾空格 |
striptags | 渲染时删除掉值中所有HTML标签 |
join | 拼接字符串 |
replace | 替换字符串中的值 |
round | 对数据进行四舍五入 |
示例代码
@app.route("/tmp2") def template_test2(): name = "harRY" return render_template("template2.html",name=name)
template2.html
{{ name | capitalize }}
{# 单词全小写 #}{{ "Hello World!" | lower }}
{# 去除首尾空格 #}{{ " Hello World! " | trim }}
{# 四舍五入取整 #}{{ 1.26 | round }}
{# 四舍五入保留2位小数取整 #}{{ 1.2666 | round(2) }}
调用
自定义过滤器
当遇到现有的过滤无法满足我们的需求时,这时就需要我们自定义一个过滤器了
自定义过滤器有两种方式
方式1:@app.template_filter()
# 第一种方式,用作计算字符串长度 @app.template_filter() def str_len(args): return len(args)方式2: 先定义方法,后采用 app.jinja_env.filters
# 第二种方式, 去除字符串中的空格 def replace_space(args): return args.replace(" ", "") app.jinja_env.filters['replace_space'] = replace_space使用以上自定义的过滤器
@app.route("/tmp3") def template_test3(): name = "harRY" aaa="dfs jklf jffff " return render_template("template3.html", name=name,aaa=aaa)template3.html
{{ name | str_len }}
{{ aaa | replace_space }}
输出
程序猿与投资生活实录已改名为 程序猿知秋,WX 公众号同款,欢迎关注!!
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |