过滤器基本使用
举个例子,哪里用到了过滤器
访问:
https://www.
xfz.cn/
,说明提示时间处就用到了过滤器
-
简单使用
python文件如:
@app.route('/')
def hello_world():
return render_template('index.html',postion=-1)
html页面如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SXT</title>
</head>
<body>
<h3>过滤器的基本使用</h3>
<p>位置的绝对值为[未使用过滤器]:{{ postion}}</p>
<p>位置的绝对值为[使用过滤器]:{{ postion|abs}}</p>
</body>
</html>
-
简单总结:
1.
有时候我们想要在模版中对一些变量进行处理,那么就必须需要类似于Python中的函数一样,可以将这个值传到函数中,然后做一些操作。在模版中,过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。
2.
基本语法: `{
{ variable|过滤器名字 }}` 。使用管道符号 `|` 进行组合。
-
自定义过滤器
即自定义模版过滤器:
只有当系统提供的过滤器不符合需求后,才须自定义过滤器。过滤器本质上就是一个函数。如果在模版中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器这个函数,然后函数的返回值会作为这个过滤器的返回值。
需要使用到一个装饰器:`@app.template_filter(‘过滤器名称’)`
-
自定义时间处理过滤器案例
例如:操作发布新闻 与现在的时间间隔
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>使用自定义过滤器 处理时间</h3>
<p>新闻创建的时间old:{{ creat_time }}</p>
<p>新闻间隔现在的时间new:{{ creat_time | handle_time }}</p>
</body>
</html>
from flask import Flask,render_template
from datetime import datetime
app = Flask(__name__)
# 将模版设置为自动加载模式
app.config["TEMPLATES_AUTO_RELOAD"] = True
@app.route('/')
def hello_world():
context = {
"creat_time": datetime(2019, 8, 9, 10, 54, 11)
# datetime(2019, 8, 9, 10, 54, 11) 函数的作用是设置当前这条信息的创建时间为 【2019-8-9 10:54:11】
}
# return 'Hello World!'
return render_template("index.html", **context) # 使用传参技巧传参
# 6.自定义过滤器 来处理时间
# 需求:操作发布新闻 与现在的时间间隔
@app.template_filter("handle_time")
def handle_time(time):
"""
time距离现在的时间间隔
1. 如果时间间隔小于1分钟以内,那么就显示“刚刚”
2. 如果是大于1分钟小于1小时,那么就显示“xx分钟前”
3. 如果是大于1小时小于24小时,那么就显示“xx小时前”
4. 如果是大于24小时小于30天以内,那么就显示“xx天前”
5. 否则就是显示具体的时间 2018/10/20 16:15
"""
if isinstance(time, datetime):
now = datetime.now()
timestamp = (now - time).total_seconds() # .total_seconds() 持续时间中的总秒数。
if timestamp < 60:
return "刚刚"
elif timestamp < 60 * 60:
minutes = timestamp / 60
return "%s分钟前" % int(minutes)
elif timestamp < 60*60*24:
hours = timestamp / (60 * 60)
return "%s小时前" % int(hours)
elif timestamp < 60*60*24*30:
days = timestamp / (60 * 60 * 24)
return "%s小时前" % int(days)
else:
return time.strftime("%Y/%m/%d %H:%M") # 得到指定格式的时间
else:
return time
if __name__ == '__main__':
app.run()
执行完的浏览器界面显示
版权声明:本文为Melody_92原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。