我的第三十六篇博客---flask-过滤器,页面包含等

flash 闪现消息
要加密钥 app.secret_key=''

 for

在一个for循环中你可以访问这些特殊的变量:
变量 描述
loop.index 当前循环迭代的次数(从1开始)
loop.index() 当前循环迭代的次数(从0开始)
loop.revindex 到循环结束需要迭代的次数(从1开始)
loop.revindex() 到循环结束需要迭代的次数(从0开始)
loop.first 如果是第一次迭代,为True
loop.last 如果是最后一次迭代,为True
loop.length 序列中的项目数
loop.cycle 在一串序列间期取值的辅助函数,见下面示例程序

再循环内部,你可以使用一个叫做loop的特殊变量来获得关于for循环的一些信息
比如:要是我们想知道当前被迭代的元素序号,并模拟Python中的enumerate函数做的事情,则可以使用loop变量的index属性,例如:
{%for post in posts%}
{{loop.index}},{{post.title}}
{%endfor%}
会输出这样的结果:
1,post title
2,second post

cycle函数会在每次循环的时候,返回其参数中的下一个元素,可以那上面的例子来说明:
{% for post in posts%}
{{loop.cycle('odd','even')}} {{post.title}}
{% endfor %}

会输出这样的结果:
odd post title
even second post

包含

Jinja2模板中,除了宏和继承,还支持一种代码重用的功能,叫包含(Include)。它的功能是将另一个模板整个加载到当前模板中,并直接渲染。

include的使用

{% include 'hello.html' %}

包含在使用时,如果包含的模板文件不存在时,程序会抛出TemplateNotFound异常,可以加上 ignore missing 关键字。如果包含的模板文件不存在,会忽略这条include语句。

include 的使用加上关键字ignore missing
{% include 'hello.html' ignore missing %}

过滤器

过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用Python中的某些方法,那么这就用到了过滤器

使用方式:
过滤器的使用方式为: 变量名| 过滤器

链式调用
过滤器是可以支持链式调用的:
{{'hello world' | reverse |upper}}

safe:禁用转义,即让内容里面的标签生效
<p>{{'<em>hello</em>'|safe>}}</p>

字符串操作
lower:把值转成小写
{{'HELLO' | lower}}

upper :把值转为大写

capitalize 首字母大写,奇语字母转小写

reverse 字符串反转

format:格式化输出
{{'%s'is'%d' | format('name',17)}}

striptags:渲染之前吧值中的所有HTML标签全部删掉

truncate:字符串截断
{{'hello world' | truncate(8)}}

列表操作
first:取第一个元素
<p>{{ [1,2,3,4] | first}}</p>
last:取最后一个元素
<p>{{ [1,2,3,4] | last}}</p>
length:获取列表长度
<p>{{ [1,2,3,4] | length}}</p>
sum:列表求和
<p>{{ [1,2,3,4] | sum}}</p>
sort:列表排序
<p>{{ [1,2,3,4] | sort}}</p>
语句块过滤

{% filter upper %}
#一大堆文字#
{% endfilter %}

自定义过滤器:

py文件:

from flask import Flask,render_template

app=Flask(__name__)

@app.template_filter('lireverse')
def do_listreverse(li):
#通过原列表创建一个新列表
temp_li=list(li)
#将新列表进行反转
temp_li=sorted(temp_li,key=lambda x:len(x),reverse=False)
return temp_li
@app.template_filter('s')
def a(li):
new=list(li)
new=sorted(new,key=lambda x:x['age'],reverse=True)
return new

name='<b>哈哈</b>'
dict2=[{'name':'小明','age':10},{'name':'小红','age':20},{'name':'校长','age':15}]
list2=['asd','q','as','zxas']
@app.route('/')
def a():
return render_template('4.html',name=name,list=list2,dict=dict2)


if __name__ == '__main__':
app.run(debug=True)


html文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ name | safe }}<br>
{{ name }} <br>
{{ name | striptags }}<br>
{{ list[0] }} <br>
{{ list | last }}<br>
{% filter upper %}
adsAS #是整个文本的小写字母都变为大写
{% endfilter %} <br>
{{ list | sort }} <br>
{{ list | lireverse }}<br>
{{ dict | s }} <br>
{{ dict }}
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/sll-csdn/p/10926190.html
今日推荐