Day043 Jinja2过滤器

mac2025-08-09  13

过滤器基本使用

举个例子,哪里用到了过滤器

访问: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>

app.py

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()

执行完的浏览器界面显示

最新回复(0)